【问题标题】:Modifying a crontab from a cron job从 cron 作业修改 crontab
【发布时间】: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”,这是对通常没有被问到的问题的答案,并且在最小的测试用例中很容易验证(这里的问题实际的脚本是要详细说明(锁定等)来验证这个简单的问题)。

标签: python linux ubuntu cron


【解决方案1】:

GPL 不是反商业的。 python-crontab 可用于商业产品和服务。您必须只遵循 copy-left 规则,即实际代码本身不能成为专有的。你想卖多少就卖多少,作为作者,我鼓励你从我的作品中赚钱。

除了那个错误,看起来你的问题无论如何都不需要 python-crontab。你可以自己打开文件,如果这不起作用,它永远不会与 python-crontab 一起工作。

【讨论】:

  • 我知道 GPL 的限制,由于这是一个闭源项目,我希望遵守 GPL :)
  • Chinmay - 这是一个光荣的决定。只需使 /actual/ 代码可用。 Python 库未编译,因此不会影响产品许可证的其余部分。如果您更改 /my/ 代码,请告诉我。
  • Python 代码将使用 PyInstaller 或类似的东西“编译”/包装。此外,虽然代码很容易获得,但我宁愿遵守 GPL 的精神而不是信条。如果我不希望用户看到代码(并且如果我正在采取措施确保这一点),无论用户是否可以,我都不想使用 GPL 许可的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多