crontab 的基本格式是:
分 时 日 月 星期 命令
分 值从 0 到 59。 时 值从 0 到 23。 日 值从 1 到 31。 月 值从 1 到 12。 星期 值从 0 到 6, 0 代表星期日。 执行的命令
空格用来分开字段,要微调你的时间表,也可以用下面特殊字符来设定范围:
符号描述*通配符,表示所有支持的时间值,用逗号分隔多个时间-连接两个数值,给出一个范围/指定一个周期或频率例如,下面一行:
*/5 9-16 * 1-5,9-12 1-5 ~/bin/i_love_cron.sh
*/5 9-16 * 1-5,9-12 1-5 ~/bin/i_love_cron.sh
用|分割方便理解,实际使用时没有| */5 |9-16 | * |1-5,9-12 |1-5 | ~/bin/i_love_cron.sh
将会在周内(周一到周五)从早上 9 点到下午 4 点 55 分,每隔 5 分钟执行一次脚本 i_love_cron.sh,夏季除外(6月、7月和8月)。
此外,crontab 还有一些特殊的关键字。
@reboot 启动时
@yearly 每年一次
@annually ( 同 @yearly)
@monthly 每月一次
@weekly 每周一次
@daily 每天一次
@midnight (午夜,同 @daily)
@hourly 每小时一次
例如:
@reboot ~/bin/i_love_cron.sh
将在启动时执行脚本 i_love_cron.sh。
安装cronie如果你运行crontab
时报错:command not found: crontab 那么先安装一下cronie即可解决。
sudo pacman -S cronie
启动一下服务
#设置开机启动
sudo systemctl enable cronie.service
#立即启动
sudo systemctl start cronie.service
发现定时任务不执行怎么办?
看一下你的服务是否开启了!看一下你的服务是否开启了!看一下你的服务是否开启了!
重要的事情说三遍。我就是因为忘记启动服务了,白白浪费了1个多小时,我一直以为是我写的格式不对!🤣 知道真相的我大腿拍肿了
systemctl status cronie.service
#设置开机启动
sudo systemctl enable cronie.service
#立即启动
sudo systemctl start cronie.service
基本命令
Crontabs 绝不应该被直接编辑;用户应该使用 crontab 程序来处理他们的 crontabs。为了能够访问这个命令,用户必须添加到 users 用户组(见 gpasswd 命令)。
要查看 crontabs,用户应该运行下面的命令:
$ crontab -l
要编辑 crontabs,可以使用:
$ crontab -e
Note: 默认情况下,crontab 命令使用 vi 编辑器。可以通过export EDITOR 或 VISUAL 来配置,或通过这样的命令直接指定编辑器:EDITOR=vim crontab -e
。
要移除 crontabs, 可以使用:
$ crontab -r
如果用户有一个保存好的 crontab 想要用它完全覆盖旧的 crontab,可以使用:
$ crontab saved_crontab_filename
想从命令行(Wikipedia:stdin)覆盖一个 crontab,使用:
$ crontab -
想编辑别的用户的 crontab, 使用root运行下面的命令:
# crontab -u username -e
同一个格式(在命令后追加 -u username)也可以用来列出或删除 crontabs。
示例 三月份 周一到周五 每1分钟执行一次./runonce.sh
*/1 * * mar mon-fri ./runonce.sh
每分钟执行一次~/restartTomcat.sh
*/1 * * * * sh /home/itkey/restartTomcat.sh
凌晨1点10分执行一次操作
10 1 * * * sh /home/apex/restartTomcat.sh
参考
https://wiki.archlinux.org/index.php/Cron_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#Crontab_%E6%A0%BC%E5%BC%8F