【发布时间】:2018-01-25 03:17:34
【问题描述】:
我正在寻找应该每年运行一次我的 python 脚本的 crontab 模式。下面是我希望通过 crontab 触发脚本的日期和时间。
日期:2017 年 8 月 16 日,时间:5:00PM(今年该指定时间只触发一次脚本)
有人可以帮我解决这个问题吗?
注意:我实际上正在寻找应该在后台触发我的脚本一次并让它运行的东西(因为我的脚本有无限循环,所以一旦触发并在后台保持进程活跃应该会很好)。为此,我使用了“at”命令(通过谷歌搜索,我看到“at”作业在特定时间触发一次,并且将保持活动状态,直到/除非服务器/系统重新启动,这对我来说很好)。但看起来“在”工作没有按预期工作。我在太平洋标准时间下午 12:20 开始“at”工作,这应该让我的脚本继续运行,并且我的脚本预计会在太平洋标准时间下午 1:15 发送输出。为了测试这一点,我在下午 1:00 关闭了 SSH 会话。在关闭之前,我看到输出“atq”显示由 at 触发的作业。但是后来当我再次重新进入服务器时,我没有看到任何作业在“at”下运行。
有人可以帮我解决这些问题之一吗?最终,我正在寻找一种解决方案,以使该过程在后台永远存在。
【问题讨论】:
-
如果你想让一个进程永远活着,你应该使用一个进程监督系统——systemd(在大多数新的 Linux 发行版上),launchd(在 MacOS 上),Upstart(如果支持),@ 987654321@等cron是错误的工作工具; atd,同样。
-
...当你的程序退出时,一个真正的进程监督系统会立即得到通知(所以它不需要偶尔轮询),会知道它如何退出,并且将为用户提供方法来指示他们是否希望进程保持运行、停止运行、运行一次并允许退出(如果选择)等。
-
@CharlesDuffy 你能给出这个监督的例子/语法/用法吗?是否有任何日志来检查进程是否正在运行?即使 ssh 退出会话,这是否也能让进程保持活动状态?谢谢!
-
每个工具都有自己的用途;哪个合适取决于您的目标操作系统。您知道您的目标操作系统附带哪个初始化系统吗?
-
@chaitanya,请参阅fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet 了解命令行用法的一些提示,fedoraproject.org/wiki/… 了解有关添加您自己的服务文件的高级指南,if i> 你的 Linux 发行版基于 systemd。
标签: python linux automation cron