我有一个非常简单的bash脚本。我希望这个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
答案 0 :(得分:2)
我认为您可能已经找到了根本原因和可行的解决方案。
但我正在写此答案,以便对其他人有所帮助。
This可能是根本原因。
仍然不能保证nohup
的一致性(在给出的答案的结尾处提到)。
其他执行相同操作的命令。
生成带括号的子shell。
(./test.sh > test.log &)
与背景“&”符号一起消失。
./test.sh > test.log & disown
答案 1 :(得分:1)
您可以使用screen
:
screen -L ./test.sh
您可以使用Ctrl-A
和d
分离屏幕。
您可以在不删除test.sh
您可以退回,然后输入
screen -r
回到你的剧本。
标准输出将被记录到screenlog.0