プログラムはシグナルトラップによって呼び出された関数から開始されませんでした。

プログラムはシグナルトラップによって呼び出された関数から開始されませんでした。

コンソールで閉じるときにいくつかのクリーンアップコマンドを実行する必要があるBashスクリプトがあります。

デフォルトでは、クリーンアップは私のPythonデーモンから再起動するコマンドです。) 現在のプロセスを停止し、新しいプロセスを開始します。 Pythonデーモンアプリケーションを監視するためのBashスクリプト。

しかし、問題は、何らかの理由でPythonプログラムを再起動するためにプログラムを起動しないことです。

Bashスクリプトは、Raspbianを使用するRaspberry Piのデスクトップにあります。ダブルクリックして選択して実行する必要があります。端末で実行

これが私のコードの中核です。

function clean_up {
    python3 A restart & #stops the python Deamon if running, then start it. (will start if it wasn't running to begin with)
    disown
    quit    
}

trap clean_up SIGINT 
trap clean_up SIGTERM
trap clean_up SIGHUP
trap clean_up SIGCHLD
trap clean_up SIGCONT
python3 A stop
... (code to start monitor)
python3 A start ArgumentToHookToMonistor 

答え1

これが好きなものになるかどうかはわかりませんが、問題をデバッグするのに役立ちます。

  • スクリプトの先頭で:ジョブ制御を有効にする(スクリプトではデフォルトで無効になっています):set -m

  • 次に、clean_up関数で次のようdisownに変更します。disown %1 2>&1 | tee /path/to/logfile.log

  • また、関数でスクリプトを手動で実行するときにメッセージを表示する時間が必要な場合は、その行のsleep 3前に追加してください。quit

関連情報