一、Crontab 命令安装教程
首先检查一下 Crontab 是否安装:
1 | crontab -l |
如果没报错,就是已经安装好了,一般来说系统都会自带。
如果没安装,进行安装:
CentOS:
1 | yum install vixie-cron |
Ubuntu:
1 | apt-get install cron |
二、Crontab 命令使用教程
命令格式:
1 | crontab [-u user] file crontab [-u user] [ -e | -l | -r ] |
是不是觉得怪复杂的,其实一般来说其实就三个命令:
- 列出所有定时任务:
crontab -l
- 编辑所有定时任务:
crontab -e
- 删除所有定时任务:
crontab -r
使用 crontab -l 可以列出所有的定时任务,一行一个任务,一般来说,每行的格式如下:
1 | 分 时 日 月 星期 要运行的命令 |
- 第 1 列:分钟,取值范围:0~59
- 第 2 列:小时,取值范围:0~23(0表示子夜)
- 第 3 列:日,取值范围:1~31
- 第 4 列:月,取值范围:1~12
- 第 5 列:星期,取值范围:0~7(0 和 7 表示星期天)
- 第 6 列:要运行的命令
对于每一列,有如下几种表示方法:
- *:每单位(比如每分钟,每小时)
- 具体数字:就是具体的时间或者日期
- 取值范围:比如 3 – 5,就是从 3 到 5 的所有值都取
- */数字:比如 */2,就是每 2 分钟或者每 2 天之类的意思
下面看几个例子:
实例 1:每 1 分钟执行一次 myCommand
1 | * * * * * myCommand |
实例 2:每小时的第 3 和第 15 分钟执行
1 | 3,15 * * * * myCommand |
实例 3:在上午 8 点到 11 点的第 3 和第 15 分钟执行
1 | 3,15 8-11 * * * myCommand |
实例 4:每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行
1 | 3,15 8-11 */2 * * myCommand |
实例 5:每周一上午 8 点到 11 点的第 3 和第 15 分钟执行
1 | 3,15 8-11 * * 1 myCommand |
实例 6:每晚的 21:30 重启 smb
1 | 30 21 * * * /etc/init.d/smb restart |
实例 7:每月 1、10、22 日的 4 : 45 重启 smb
1 | 45 4 1,10,22 * * /etc/init.d/smb restart |
实例 8:每周六、周日的 1 : 10 重启 smb
1 | 10 1 * * 6,0 /etc/init.d/smb restart |
实例 9:每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 smb
1 | 0,30 18-23 * * * /etc/init.d/smb restart |
实例 10:每星期六的晚上 11 : 00 pm 重启 smb
1 | 0 23 * * 6 /etc/init.d/smb restart |
实例 11:每一小时重启 smb
1 | 0 */1 * * * /etc/init.d/smb restart |
实例 12:晚上 11 点到早上 7 点之间,每隔一小时重启 smb
1 | 0 23-7 * * * /etc/init.d/smb restart |
实例 13:5小时后 每一小时重启 smb
1 | 0 5/1 * * * /etc/init.d/smb restart |
错误示例:
如果你想定一个每天两点执行的任务:
1 | 0 2 * * * /etc/init.d/smb restart |
但不能写成:
1 | * 2 * * * /etc/init.d/smb restart |
这种写法表示每天两点开始每分钟执行一次任务, 可能会陷入嵌套重复执行的问题
配置完后 最后启动定时任务
ubuntu下启动、停止与重启cron:
1 | $sudo /etc/init.d/cron start |
定时任务备份
可以使用这种方法在$HOME目录中对crontab文件做一备份:
1 | $ crontab -l > $HOME/mycron |
问题排查
1. 启动cron 报错:
1 | cron: can't lock /var/run/crond.pid, otherpid may be 4187: Resource temporarily unavailable |
解决方案:
依次执行以下三个命令
删除pid 重新加载配置 重启启动cron
1 | rm -rf /var/run/crond.pid |
1 | cron reload |
1 | cron restart |
2.任务不执行 日志不打印
指令必须以绝对路径开头 比如:
1 | * */2 * * * /usr/bin/python3 /root/xxx/xxx.py >>/root/xxx/mylog_$(date +\%Y-\%m-\%d-\%H:\%M:\%S).log 2>&1 |
本文为作者原创 转载时请注明出处 谢谢
乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站