udevイベントを介して長寿命のアプリケーションを複数回実行するように設計されたスクリプトを実行する最良の方法は何ですか?

udevイベントを介して長寿命のアプリケーションを複数回実行するように設計されたスクリプトを実行する最良の方法は何ですか?

ボタンを押すとUSB経由で接続するデバイスがあります。ボタンを離すとすぐに接続が停止します。このボタンを押すと、グラフィックアプリケーションを起動したいと思います。

ボタンに正常にアクセスしてアプリケーションを起動できます。問題は、ボタンを複数回押すと、udevが明らかにイベントをキューに入れるか処理できるまで保持するため、アプリを閉じてから再開することです。

そのため、アプリケーションが実行されていることを確認するためにbashスクリプトを作成しました。実行していない場合はアプリケーションを起動します。実行すると、アプリケーションが最大化されます。ここでも同じ問題が発生し、バックグラウンドでアプリを起動しようとしましたが、&udevルールが完了するとアプリは終了しました。同じnohup

たぶんbashスクリプトが最善の方法ではないかもしれません。スクリプトが完了して再実行できるように、別のプロセスで長寿命のアプリケーションを起動できるスクリプトが必要です。可能であれば、より多くの依存関係をインストールする必要がないように、Linuxの基本的な方法でなければなりません。

このスレッドを見つけました。Udevイベントで長いプロセスを実行するには?同じ問題に対処しています。彼はusingを使用して問題を解決したようですが、cmd | at nowcronieには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

関連情報