首先,对不起我的英语不好。我是 Crontab 的新手,我正在制定一些时间表。我正在用 Python 从互联网上抓取一些数据,我有这个网站,当你抓取一些数据时,你必须等待 24 小时才能获取下一部分数据,所以如果我的 cronjob 每天从 00.00 开始,它需要一些运行 Selenium 并抓取数据的秒数。第二天必须以几秒钟的偏移量运行,以确保从我进行抓取的那一刻起 24 小时内完成,而不是从工作开始的那一刻起 24 小时内完成。那么,有什么方法可以每天运行作业,比前一天延迟 5 分钟,或者我需要在 python 脚本中做一些每天睡得更久的东西。
对不起,很长的帖子
应该是最简单的。cron 无法处理变量的时间。
at
当您需要启动脚本时,该命令要灵活得多。你需要一个脚本来执行1 是您根据开始日期增加的变量(第 1 天为 +1 分钟,第 2 天为 +2 分钟等)。请注意,您在某些时候会遇到麻烦:在 60 * 24 = 1440 天内,您会让您跑过下一个午夜。将该脚本添加到您的 cron。
您还可以
at -t
在其中设置一个时间,使其成为不需要 cron 的正常命令:(2019 年 3 月 30 日 0:00,31.3 0:00 过去 1 分钟,1.4 0:00 过去 2 分钟等)
实现目标的另一种可能方法是使用systemd 计时器单元 和服务单元而不是cronjob。
文件
/etc/systemd/system/my-script.timer
:文件
/etc/systemd/system/my-script.service
:然后运行以下命令:
这将启用(=启动时自动启动)计时器单元并立即启动它。
my-script
定时器单元控制服务单元,即:系统启动后2分钟启动同名服务单元(不活动(=已停止)。如果启动时间超过 2 分钟,则立即激活计时器。
请注意,服务单元将以用户root身份运行。要更改它,请将
User=
属性添加到服务单元:要检查状态,请发出:
在这里我们可以看到定时器单元已启用(意味着它将在启动时启动)并且当前正在等待 19 分钟。服务单元将
Mon 2019-04-01 13:52:59
在大约 23 小时。服务单元当前处于非活动状态。(我的测试脚本 ,my-script.sh
只是做了一个sleep 30
。)我们还可以看到服务单元是不活动的,因为Sun 2019-03-31 13:47:59
。加上 1 天 5 分钟就可以准确Mon 2019-04-01 13:52:59
得出计时器单元的触发时间。进一步阅读:
您可以简单地运行一个持久的 bash 脚本,而不是使用 cron,该脚本在每次调用您的程序后会休眠一天零十秒: