【发布时间】:2013-10-26 14:50:24
【问题描述】:
我有一个以多种模式运行的 Python 脚本。其中一种模式监视某些文件,如果这些文件已被修改,脚本将恢复它们。我这样做的方式是通过 cron 每分钟运行一次脚本。
存在另一个 cron 作业(实际上是使用不同参数调用的同一个脚本),用于在计划时间过去后从 crontab 中删除脚本。最初,我试图在/etc/cron.d 中使用crontab。如果在命令行上执行该脚本会按预期运行,但在从 cron 运行时不会编辑 crontab。
然后我转而编写一个临时文件并从脚本执行crontab tempfile(通过subprocess.Popen)。这也不起作用,因为 crontab 根本没有创建。从命令行执行crontab tempfile 并使用脚本创建的临时文件按预期工作。
我不能使用 python-crontab 库,因为这是一个商业项目,并且该库是 GPL 的。
cron 中是否有任何固有限制阻止这两种方法工作?
【问题讨论】:
-
我从来没有遇到过 cronjobs 无法修改 cronjobs / cron 配置文件的问题,只要它们以具有正确权限的用户身份运行。您可能想让该进程记录一些调试信息,或者您的“文件恢复器”可能会将 crontab 配置恢复到原来的位置......
-
我特别确保文件恢复器不会触及 crontab。此外,正如我所说,一切都按预期从命令行运行。
-
使用
env -i andthenyourcommand是否一切正常?因为否则我建议您参考我的第一条评论:cronjobs 在编辑 crontab 配置时不受限制,不要在那里寻找错误。 -
嗯,原来是两个 cron 作业同时启动并试图获取相同的 PID 锁。解决这个问题就解决了。 @Wrikken:如果您发表评论作为答案,我会接受。
-
我可以发布作为一个答案,但由于作为修复的环境有点狭窄且完全依赖于代码,并且不普遍适用,我宁愿将问题保留为“一般不适用'并将其保留在那里,使其自然而然地脱离 SO。其他人可以从中得到的唯一信息是:“是的,cronjobs 可以改变 cronjobs”,这是对通常没有被问到的问题的答案,并且在最小的测试用例中很容易验证(这里的问题实际的脚本是要详细说明(锁定等)来验证这个简单的问题)。