Crontab 自动执行可以设定在每月的某一天执行, 如果遇到需要在每个月最后一天执行一次的情况, crontab 则没有这个功能, 这时可以用 Shell Script (其他语言的做法也一样) 检查今天是否当月最后一天来解决, 以下是具体做法。
首先建立一个 Wrapper Script, 加入以下内容:
wrapper.sh
|
1 2 3 4 5 6 7 8 |
#!/bin/sh DAY=$(date -d "$(date +%d) +1 day" +%e) if test $DAY -eq 1; then // run the script here /root/my-script.sh fi |
这个 Wrapper Script 很简单, 第三行会取得明天的日期并放到 $DAY 变量, 然后检查 $DAY 是否 1, 如果明天的日子是 1 号, 那么今天便是本月最后一天。如果是当月最后一天, 第 7 行会执行原来想要执行的 Shell Script, 上面例子是 /root/my-script.sh.
下一步是建立 crontab, 每个月最后一天只会有 28, 29, 30 及 31 日, 所以会设定每月的 28, 29, 30 及 31 日执行, 或者不想麻烦, 设定每天执行一次也可以, 编辑 crontab:
# crontab -e
加入以下一行:
|
1 |
0 0 28-31 * * /path/to/wrapper.sh |
储存后离开编辑器便完成了。