私はnohupコマンドの終了ステータスをキャプチャし、そのステータスに基づいてメールを送信する方法を理解しようとしました。
以下は私のコードです。
if [[ "" != "$PID" ]]; then
echo "killing $PID"
kill -9 $PID
nohup java -jar Xyz-port-0.0.1.jar &
<< Exit Code and then send mail if Exit
code is 0>>
else
echo "Process doesn't exist"
fi
ベストアンサー1
バックグラウンドタスクはいつも正常に開始されました:
$ sntaoehu &
[1] 33566
$ bash: sntaoehu: command not found
[1]+ Exit 127 sntaoehu
$ echo $?
0
nohup
バックグラウンドでJavaプログラムを起動できず、コマンドが終了するまでスムーズに実行されるかどうかを検出できません。コマンドnohup
が見つからないか開始できないか、java
Javaプログラムが終了するたびにコマンドが終了します。nohup
バックグラウンドでプログラムを実行しません。これは単にプログラムがすべてのシグナルを無視し、プログラムがHUP
終了するまで停止し、プログラムの終了状態を呼び出しシェルに返します。
作業が始まったらメールを送る失敗、あなたはできます
(
nohup java -jar Xyz-port-0.0.1.jar
status=$?
if [ "$status" -eq 126 ] || [ "$status" -eq 127 ]; then
# something wrong in launching java
echo 'nohup failed to run java'
printf 'nohup exit status is %s\n' "$status"
elif [ "$status" -ne 0 ]; then
# the java code returned an error
echo 'java returned an error'
printf 'java exit status is %s\n' "$status"
else
# everything went well and java exited ok
echo 'java exited safely'
fi | mail -s 'java job status report' [email protected]
) &
echo 'started background job'
つまり、バックグラウンドサブシェルを起動し、その中でプログラムを実行してから、126または127が返されるかどうかをテストします。コマンドが見つからないか起動できない場合は、nohup
これを実行してください。java