我停止了Cron作业后就不会再开始?

时间:2018-07-03 11:08:18

标签: bash cron

我编写了一个脚本,可以在启动时不断运行。如果由于某种原因该脚本失败,那么我编写了第二个脚本来检查它是否失败,如果失败,请再次运行第一个脚本。然后,我将第二个脚本设置为cronjob,使其每分钟运行一次,以便不断检查第一个脚本是否仍在运行。

因此要进行测试,请重新启动系统。我在htop中看到第一个脚本正在按预期从启动运行。好。我终止了测试第二个脚本的过程。当然,第二个脚本再次启动第一个脚本。还好。然后,我杀死了 this 进程,但是第二个脚本现在不再运行。当我手动启动第一个脚本时,它仍会更新一个txt文件,但是第二个脚本只是不像预期的那样启动第一个脚本。是因为我杀死了cronjob吗?重新启动cron服务并不能解决任何问题,所以我不知道为什么我的第二个脚本根本没有再运行。

第一个脚本:

#!/bin/bash
stamp=$(date +%Y%m%d-%H%M)
timeout 10d tcpdump -i eth0 -s 96 -z gzip -C 10 -w /home/user/Documents/${stamp}

第二个脚本:

#!/bin/bash
echo "not running" > /home/working.txt
if (( $(ps -ef | grep -v grep | grep tcpdump.sh | wc -l) > 0 ))
then
echo "tcpdump is running!!!" > /home/working.txt

else
/usr/local/bin/tcpdump.sh start
fi

有帮助吗?

1 个答案:

答案 0 :(得分:0)

运行一个简单的for循环作为主脚本可能会更好,而这会在后台启动tcpdump脚本,因此类似:

#!/bin/bash

while true; do
    if ps -ef | grep -v grep | grep -q tcpdump; then
        : tcpdump running OK
    else
        # tcpdump not running - start it off
        nohup /usr/local/bin/firstscript.sh start &
    fi
    sleep 30
done

这将检查“ tcpdump.sh”是否在“ ps -ef”命令的输出中-如果存在,则什么也不做(请注意,“ then”和“ else”之间必须有一个实际命令-仅使用它的参数并忽略它们的“:”命令就足够了)。如果未运行,请在后台启动第一个脚本。然后睡眠30秒钟,然后再次检查。 (是的,我可以颠倒测试,这样我就不需要一个空的“然后”臂,但这会使代码不那么明显了)

您将此脚本作为启动时启动的脚本。

编辑:您真的要检查“ tcpdump.sh”吗?那实际上是第一个脚本的名字吗?假设您确实要检查tcpdump程序,则可以使用:

if pgrep tcpdump; then