Cron选项卡模式在一年中运行一次脚本/在生命周期中运行一次

时间:2017-08-16 20:45:42

标签: python linux automation cron

我正在寻找应该在一年内运行一次python脚本的crontab模式。下面是我希望通过crontab触发我的脚本的日期和时间。

日期:2016年8月16日,时间:下午5:00(今年应在指定时间仅触发一次脚本)

有人可以帮帮我吗?

注意:我实际上正在寻找应该在后台触发我的脚本一次并保持运行的东西(因为我的脚本有无限循环所以一旦触发并在后台保持进程活着应该做得很好)。为此,我使用了“at”命令(来自谷歌搜索,我看到“at”作业在特定时间触发一次,并将保持活着,直到/除非服务器/系统重新启动,这对我来说没问题)。但看起来像“在”工作没有按预期工作。我在太平洋标准时间下午12:20开始“工作”,这应该保持我的脚本运行,我的脚本应该发送输出和太平洋标准时间下午1:15。为了测试这个,我在下午1点关闭了SSH会话。在关闭之前,我看到输出“atq”显示由at触发的作业。但是后来当我再次重新进入服务器时,我看不到任何工作在“at”下运行。

有人可以帮我解决其中一个问题吗?最终,我正在寻找一种解决方案,以便在后台永远保持这个过程。

2 个答案:

答案 0 :(得分:1)

Cron不适合这种情况,因为它基于一定的间隔运行程序。

一个干净的解决方案是使用主管:http://supervisord.org/

通过包管理器安装supervisor,使脚本可执行,并将其添加到/etc/supervisor/conf.d/$YOUR_SCRIPT_NAME.conf,然后重新启动主管。

[program:$YOUR_SCRIPT_NAME]
command=$PATH_TO_YOUR_SCRIPT
autostart=true
autorestart=true

您也可以在配置文件中设置日志和错误输出文件的位置:http://supervisord.org/configuration.html

答案 1 :(得分:-1)

让我们开始创建您需要的系统:

首先,您需要为python代码创建一个跑步者脚本:

/usr/local/bin/my_runner

#!/bin/bash
python /path/to/my/script

$sudo chmod +x /usr/local/bin/my_runner

然后你需要创建/usr/local/bin/startup_runner

#!/bin/bash
echo "@reboot    /usr/local/bin/my_runner" >> /var/spool/cron/crontabs/root
crontab -u root -l | grep -v '/usr/local/bin/startup_runner'  | crontab -u root -

$sudo chmod +x /usr/local/bin/startup_runner

在此结束时,您必须在8月16日至2017年的时间:下午5:00前往第一个来电者

$sudo crontab -e

将以下内容添加到crontab文件的末尾

0 17 16 8 *    /usr/local/bin/startup_runner

这对你来说很好,有关脚本的任何问题吗?