我在使用 cron 和 Python 时遇到了问题。
我有一个可以实时识别人脸的代码,我需要关闭这个程序,这样它就可以每天用它找到的名称写入新文件。
我在写 'crontab -e' 在控制台和内部控制器中我写了这个:
52 17 * * * /usr/bin/python /home/{usr}/{Folder name}/main.py
我预计我的程序将被关闭并重新打开,但什么也没发生。怎么了?
答案1
程序运行的环境cron
与交互式 shell 或桌面登录会话中的环境不同。
对此的“标准”解决方案是编写一个包装脚本,将环境设置为您的程序所需的 - 例如虚拟环境,或者只是通过设置环境变量 - 并从 cron 运行包装器脚本。
无论如何,这对于执行脚本来说是有用的。
至于杀死它或使其根据某些条件采取某些特定操作(例如,空队列或用完要处理的输入数据;一天中的某个时间;接收特定信号,如 SIGHUP、SIGSTOP、SIGUSR1 等;是否存在信号量文件等),这取决于您的 python 程序来检测并采取行动。
或者您可以让另一个 cron 作业杀死它,或者让启动它的 cron 作业在启动新实例之前杀死任何现有实例(或只是其中一些) - 使用 PID 文件或运行pkill
或类似的东西。
答案2
看起来环境有问题,我们可以从 shell 环境变量设置 cron 环境
# Make sure to have python file first line is #!/usr/bin/env python
# Setting cron env like below and setted here the SHELL
SHELL=/bin/bash
52 17 * * * /home/{usr}/{Folder name}/main.py