我有一个非常简单的Bash脚本。这个脚本在监控某些服务,因此我希望在退出终端后,它能继续运行。然而,我遇到了一个问题,就是一旦我退出终端,该进程就会被终止。
我以以下方式运行该进程:
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
/dev/null
;(2)考虑为 HUP、INT、QUIT、TERM、PIPE 和其他可能相关的信号添加信号处理程序(在我看来,HUP 和 TERM 最重要),并且每个信号处理程序至少报告接收到的信号。然后重新运行脚本,断开连接并重新连接。您还可以在日志文件中添加时间戳,至少在每次迭代的开始时(以及信号处理程序),以便知道何时发生事情。 - Jonathan Lefflerdisown
。最佳结果包括在子进程分离后仍然输出消息。 - jww