我有一个用 python 编写的程序;我的程序每分钟从某个金融网站抓取一个值,并将该值推送到我的数据库中。我的程序大约需要 1 秒或最多 1.5 秒来完成这项工作。我设置了一个 cron 作业每分钟调用我的程序。我需要每天从上午 9 点到下午 4 点以这种方式运行我的程序。现在有时我可能必须在上午 9 点到下午 4 点之间随时停止程序来终止程序。我怎样才能做到这一点?
根据这个链接
我尝试过ps -o pid,sess,cmd afx | grep -A20 "cron$"
,但无法在列表中找到我的程序,因为它在几秒钟内完成了工作。
参考这我尝试过/etc/init.d/cron stop
,pkill 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