如何停止分钟 cron 作业?

如何停止分钟 cron 作业?

我有一个用 python 编写的程序;我的程序每分钟从某个金融网站抓取一个值,并将该值推送到我的数据库中。我的程序大约需要 1 秒或最多 1.5 秒来完成这项工作。我设置了一个 cron 作业每分钟调用我的程序。我需要每天从上午 9 点到下午 4 点以这种方式运行我的程序。现在有时我可能必须在上午 9 点到下午 4 点之间随时停止程序来终止程序。我怎样才能做到这一点?

根据这个链接 我尝试过ps -o pid,sess,cmd afx | grep -A20 "cron$" ,但无法在列表中找到我的程序,因为它在几秒钟内完成了工作。

参考我尝试过/etc/init.d/cron stoppkill cron这会杀死所有 cron 作业 - 这是我不想要的。我在 Ubuntu Linux 上运行这个 cron。

答案1

一般来说,停止和启动系统cron守护进程是一个坏主意。注释掉该行并不总是很方便,因此这里有一些相关的替代方案

使用信号量

满足此要求的一种解决方案是使用信号量(或标志)来指示是否允许脚本运行。在这种情况下,信号量可以通过文件是否存在来表示:如果文件存在,则不运行脚本,否则运行它。 (当然,可以颠倒测试,以便脚本仅在文件存在时运行。)

以下是cron已进行信号量检查的示例条目:

* * * * *    test ! -f /tmp/stop && /path/to/script...

要阻止脚本运行,只需执行touch /tmp/stop.要让它重新开始运行,只需rm /tmp/stop.

要反转测试,请对文件使用此测试/tmp/run

* * * * *    test -f /tmp/run && /path/to/script...

您可能希望在实践中使用不同的信号量文件,以确保只有授权人员才能将脚本标记为停止(或启动)。一种选择可能是"$HOME"/.scriptname.stop使用名为 的脚本scriptname

阻止代码运行

如果脚本是可执行的,并且被调用,/path/to/script...那么只需删除可执行权限或将其移开即可停止脚本运行:

chmod a-x /path/to/script

或者

mv /path/to/script{,.stop}    # i.e. mv /path/to/script /path/to/script.stop

这是一个快速且丑陋的修复,cron每次尝试运行代码时都会导致生成错误。通常,此类错误会被捕获并通过电子邮件发送给cron作业所有者,因此在执行脚本之前进行一些测试将防止这种情况被标记:

* * * * *    test -x /path/to/script && /path/to/script...

答案2

不要终止 cron 守护进程,因为它执行许多系统必需的任务。相反,编辑 crontab 文件并注释掉与脚本相关的 cron 作业。 (仅供参考,编辑后无需重新启动 cron 守护进程。)

答案3

我能想到的最简单的方法就是编辑 crontab 并注释掉 cronjob。

打开 crontab:

crontab -e

并注释掉#你的 cronjob 行。

答案4

编辑你的 python 程序并让它首先检查“不运行”文件。如果这样的文件存在,请退出您的程序,即

import os.path
if os.path.isfile('/tmp/disable_mypython'): exit()

例如,如果您检查名为的文件,/tmp/disable_mypython您可以使用以下命令轻松“禁用”您的程序:

touch /tmp/disable_mypython

并使用以下命令再次启用它:

rm /tmp/disable_mypython

相关内容