私は非常に単純なbashスクリプトを持っています。私は端末からログアウトした後、このサービスを監視しているので、このbashスクリプトを実行しておきたい。しかし、私は端末を出るとすぐにプロセスが終了するという問題があります。nohupが正しく動作しない
ように私は、プロセスを実行します。私は使用してプロセスをチェックする
nohup ./test.sh > test.log &
:
ps -aux | grep test.sh
私はスクリプトが実行されていることを私はチェックのプロセスを実行すると。しかし、私が再接続すると、スクリプトはもう実行されていません。
test.shファイルの内容は以下の通りです:
#!/bin/bash
while :
do
echo `date`": ****** Scheduled Test *****"
result1=$(wget "127.0.0.1" -q -O -)
result2=$(wget "127.0.0.1" -q -O -)
echo ": $result1"
echo ": $result2"
if [[ $result1 == *"Running OK"* ]] && [[ $result2 == *"Running OK"* ]];
then
echo "***** Running OK ***** :)"
sleep 60
continue
fi
echo "@@@@@ Not Running @@@@@"
echo "-----> Killing JARS"
kill -9 `lsof -i:4445 | cut -d' ' -f5`
kill -9 `lsof -i:4423 | cut -d' ' -f5`
./runsomejar.sh > jar1.log &
echo "-----> Restarting jar1"
sleep 60
echo "-----> Restarting jar2"
./runsomejar.sh > jar2.log &
sleep 180
done
わからないに記録されますが、提案は:(1)あまりにもログファイルに標準エラーをリダイレクトします。 '/ dev/null'から標準入力をリダイレクトします。 (2)HUP、INT、QUIT、TERM、PIPE、関連性があると思われる他のシグナル(HUPとTERMが私の考えで最も重要です)のシグナルハンドラを追加することを検討し、受け取った。その後、スクリプトを再実行して接続を切断して再接続します。また、少なくとも各繰り返しの開始時(および信号ハンドラも)にログファイルにタイムスタンプを追加すると、いつ発生するかを知ることができます。 –
[実行中のコマンドを強制終了せずに端末を閉じるにはどうすればよいですか?](http://unix.stackexchange.com/q/4004)、[puttyまたは端末が閉じられた後にプロセスを実行する] /unix.stackexchange.com/q/89483)、[ログオンスクリプトとログオフスクリプトのネットワークコールの遅延を避ける](http://unix.stackexchange.com/q/289221)など。私は 'disown最高の結果が得られました。最良の結果には、子が切り離された後にメッセージが吐き出される場所が含まれます。 – jww
端末からの 'disown'コマンドを使って同じことをすることもできますが、ほとんどのシステムでは、プロセスを開始して監視し、終了した場合には再起動することができます。 'init scripts'などで読み込みます(実際の方法はシステムによって異なります)。 – gilez