Cron 和 Python 的问题

Cron 和 Python 的问题

我在使用 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

相关内容