Crontab 设置 - 每 55 分钟执行一次脚本
Crontab setting - execute script every 55 minutes
我在创建 crontab
设置的过程中发现了一件有趣的事情。
我使用了这个命令:
crontab -e
并填写这一行:
*/55 * * * * export DISPLAY=:0 && /home/user/Documents/script.sh >/dev/null
我的想法是创建调度程序,每 55 分钟 script.sh
启动一次。
但是这个脚本是在这个时候执行的(例如):
08:55, 09:00, 09:05, 09:55, 10:00, 10:05, ...
我也不知道为什么。
谁能给我解释一下?
像这样替换脚本,它应该可以工作。
*/5 * * * * [ $(( $(date +%s) / 60 % 55 )) -eq 0 ] && export DISPLAY=:0 && /home/user/Documents/script.sh >/dev/null
分时日月年
* any value
, value list separator
- range of values
/ step values
所以它会每 5 分钟执行一次:
从 1. 1. 1970 开始经过的秒数将除以 60 = 多少分钟
echo $(日期+%s)
1476201056 ... 秒
echo $(( $(date +%s) / 60 ))
24603351 ... 分钟
之后它将根据分钟计数使用模数
当取模结果为0时,发送TRUE值。
而且是典型的逻辑AND
[ $((......)) -eq 0 ] && 导出显示.. && ... /script.sh
谢谢。
真的很有帮助:)
另一种选择是自我复制 'at' 作业。与 cron 相比的唯一优势是它不那么明显,而且如果您需要它不是每隔 X 分钟启动一次,而是在最后一项工作完成后 X 分钟启动一次。因此,您的脚本将仅包含一行以在退出前创建一个新的 'at' 作业。类似于:
echo "/full/path/to/my/script > /root/myScript.at.log" | at now + X minutes
我在创建 crontab
设置的过程中发现了一件有趣的事情。
我使用了这个命令:
crontab -e
并填写这一行:
*/55 * * * * export DISPLAY=:0 && /home/user/Documents/script.sh >/dev/null
我的想法是创建调度程序,每 55 分钟 script.sh
启动一次。
但是这个脚本是在这个时候执行的(例如):
08:55, 09:00, 09:05, 09:55, 10:00, 10:05, ...
我也不知道为什么。
谁能给我解释一下?
像这样替换脚本,它应该可以工作。
*/5 * * * * [ $(( $(date +%s) / 60 % 55 )) -eq 0 ] && export DISPLAY=:0 && /home/user/Documents/script.sh >/dev/null
分时日月年
* any value
, value list separator
- range of values
/ step values
所以它会每 5 分钟执行一次:
从 1. 1. 1970 开始经过的秒数将除以 60 = 多少分钟
echo $(日期+%s) 1476201056 ... 秒
echo $(( $(date +%s) / 60 )) 24603351 ... 分钟
之后它将根据分钟计数使用模数
当取模结果为0时,发送TRUE值。
而且是典型的逻辑AND
[ $((......)) -eq 0 ] && 导出显示.. && ... /script.sh
谢谢。
真的很有帮助:)
另一种选择是自我复制 'at' 作业。与 cron 相比的唯一优势是它不那么明显,而且如果您需要它不是每隔 X 分钟启动一次,而是在最后一项工作完成后 X 分钟启动一次。因此,您的脚本将仅包含一行以在退出前创建一个新的 'at' 作业。类似于:
echo "/full/path/to/my/script > /root/myScript.at.log" | at now + X minutes