ボタンを押すとUSB経由で接続するデバイスがあります。ボタンを離すとすぐに接続が停止します。このボタンを押すと、グラフィックアプリケーションを起動したいと思います。
ボタンに正常にアクセスしてアプリケーションを起動できます。問題は、ボタンを複数回押すと、udevが明らかにイベントをキューに入れるか処理できるまで保持するため、アプリを閉じてから再開することです。
そのため、アプリケーションが実行されていることを確認するためにbashスクリプトを作成しました。実行していない場合はアプリケーションを起動します。実行すると、アプリケーションが最大化されます。ここでも同じ問題が発生し、バックグラウンドでアプリを起動しようとしましたが、&
udevルールが完了するとアプリは終了しました。同じnohup
たぶんbashスクリプトが最善の方法ではないかもしれません。スクリプトが完了して再実行できるように、別のプロセスで長寿命のアプリケーションを起動できるスクリプトが必要です。可能であれば、より多くの依存関係をインストールする必要がないように、Linuxの基本的な方法でなければなりません。
このスレッドを見つけました。Udevイベントで長いプロセスを実行するには?同じ問題に対処しています。彼はusingを使用して問題を解決したようですが、cmd | at now
cronieにはcronに似たコマンドがないため、このコマンドは廃止されているようです。
at がインストールする必要があるパッケージであることがわかりましたが、アプリケーションも何度も起動され、スクリプトは完了しません。
私はManjaroを実行しているので、基本的にArchです。
答え1
udevキューイベントの問題を解決するには、RUN+="/local/run.sh /local/main-script.sh"
run.shに含まれているイベントを使用します。
#!/bin/bash
echo $1 | at now
まずそれがsudo apt-get install at
必要です。
何度も実行したくない場合は、次のものが必要です。
if [ -f /opt/running_on ]; then
exit
else
echo run > /opt/running_on
# put your commands here
sleep 10
rm /opt/running_on
fi