nohup无法正常工作

时间:2016-11-15 15:54:15

标签: linux bash unix nohup

我有一个非常简单的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

2 个答案:

答案 0 :(得分:2)

我认为您可能已经找到了根本原因和可行的解决方案。

但我正在写此答案,以便对其他人有所帮助。

This可能是根本原因。

仍然不能保证nohup的一致性(在给出的答案的结尾处提到)。

其他执行相同操作的命令。

  1. 生成带括号的子shell。

    (./test.sh > test.log &)

  2. 与背景“&”符号一起消失。

    ./test.sh > test.log & disown

答案 1 :(得分:1)

您可以使用screen

screen -L ./test.sh

您可以使用Ctrl-Ad分离屏幕。

您可以在不删除test.sh

的情况下退出

您可以退回,然后输入

screen -r

回到你的剧本。

标准输出将被记录到screenlog.0