udevを介して呼び出されたbashスクリプトで私の実行可能ファイルが実行されないのはなぜですか?

udevを介して呼び出されたbashスクリプトで私の実行可能ファイルが実行されないのはなぜですか?

私のコードでコンパイルされた実行可能ファイルがあります。 Raspberry Pi Zero udevWにシリアルデバイスを接続するときにこの実行可能ファイルを実行しようとしています。ただし、何らかの理由で実行可能ファイルは実行されません。見てみると、topプロセスの痕跡はありません。

これは私のudevルールファイルです/etc/udev/rules.d/10-serial-usb.rules

ACTION=="add", SUBSYSTEM=="usb", KERNEL=="1-1.3", ATTR{idProduct}=="7523", ATTR{idVendor}=="1a86", RUN="/bin/bash /home/blackbox/blackbox-cpp/run.sh"

Bashスクリプトは次のとおりです/home/blackbox/blackbox-cpp/run.sh

#!/bin/bash

/home/blackbox/blackbox-cpp/bin/blackbox &

Bashスクリプトは間違いなく実行中です。これは、スクリプトmkdirなどのコマンドを使用してtouch実際に実行されており、すべてが正しく機能しているかどうかをテストしたためです。それでは、なぜ私の実行可能ファイルが違うのですか?

動作しないということは、実行ファイルがtop

答え1

だから私の質問に答えると、私の設定ファイルの読み込み中にエラーが発生したことがわかりました。 JSONファイルを使用して構成セットを読み込んでいますが、ルートディレクトリudevでプロジェクトを実行しているため、ファイルが見つかりません。

したがって、この問題を解決するには、構成ファイルのパスに変更ディレクトリを挿入するbashスクリプトを変更する必要がありました。

#!/bin/bash

cd /home/guy/blackbox-cpp/
bin/blackbox

エラーを見つけてくれた@terdonに感謝します。

答え2

top親CPUユーザーを表示します(デフォルト)。このリストは、実行中のすべてのプロセスのリストではありません。アプリケーションはCPUをほとんど使用しないため、最上位にない可能性があります。

プロセスが実行されていないことを確認するには、次のようにします。

ps -ef | grep blackbox

スクリプトを次のように変更することもできます。

#!/bin/bash
echo $$ > /tmp/blackbox.sh.pid
/home/blackbox/blackbox-cpp/bin/blackbox

ここで、pstree -an xxxxxxxxxx は PID ファイルの PID です。

答え3

バラよりman 7 udev

デーモンやその他の長期実行プロセスは開始できません。切り離されたかどうかにかかわらず、分岐されたプロセスはイベント処理が完了した後に無条件に終了します。

udevルールでバックグラウンドプロセスを実行するには、systemdサービスを作成しますsystemctl start <your_service>

関連情報