如何定期且无限期地运行命令直至其关闭?

如何定期且无限期地运行命令直至其关闭?

我想每隔几分钟运行一个命令,直到我将其关闭。

经过一番搜索,我发现了很多方法可以完成前半部分(定期和无限期地运行命令),那么我想将其关闭怎么办?

编辑
“关闭它”可能是指“使用另一个 shell 命令将其关闭”。

编辑
只是为了澄清我真正想做的事情,实际上我想P定期运行一个Python程序,直到我给出一些命令来停止它。
以防万一P在我发出停止命令时它正在运行,我希望它首先完成当前的运行,然后从此不再运行。

答案1

您有两个选择:修改 Python 脚本,或编写 shell 脚本包装器。

修改Python脚本:

  1. 你应该围绕你想做的事情进行循环。

  2. 安装信号处理程序以捕获INT信号(由Ctrl-发送C)和TERM信号(由 plain 发送kill)。捕获到信号后,设置一个变量,告诉 Python 脚本不应再循环。我对 Python 不太熟悉,无法告诉你如何做到这一点。

替代解决方案:Shell 脚本包装器,其功能与上面相同,但在 Python 脚本之外:

#!/bin/sh

loop_again=1

trap 'loop_again=0;wait' INT TERM

while (( loop_again )); do
    echo "Kill me with 'kill -9 $$'"
    ./python_script &
    echo "Kill the Python script with 'kill $!'"
    wait
done

此包装器脚本在后台启动您的 Python 脚本,然后等待它完成。然后它会无限期地重新启动。它还告诉您如何在每次迭代中终止它和 Python 脚本。

如果你的kill脚本(使用简单的kill不是 kill -9),或按Ctrl- Cloop_again变量设置为零(这将导致循环在当前迭代结束时终止),然后等待当前正在运行的后台进程完成后再退出。

如果您使用 终止包装器脚本kill -9(这与 相同kill -s KILL,发送一个KILL无法被忽略或被信号处理程序捕获的信号),它将退出,而您的 Python 脚本将在后台运行,直到它自行完成。

答案2

您可以尝试使用watch“循环”重复运行程序并查看结果,或者使用while循环。获取该进程的 PID,echo $!并使用它kill来终止该 PID。例如 :

while :; do ./test.py; done & echo $! > /tmp/testpy.pid

当你需要时使用kill来终止程序:

kill -9 `cat /tmp/testpy.pid`

答案3

您可以创建一个 cron 作业来定期运行您的命令。例如,如果您想每小时执行一次作业,您应该创建以下 cron 作业:

0 * * * * /path/to/your/command >/dev/null 2>&1

如果你想停止作业类型的执行ps aufx|grep yourcommand|grep -v并杀死它的pid。

答案4

您可以按CTRL+或使用或c发送 SIGTERM 信号。killkillall

相关内容