linux内置的cron进程能帮我们实现很多自动化需求,利用cron搭配shell脚本,即便十分复杂的指令也没有问题。
# 介绍
我们经常使用的是crontab命令是cron table的简写,我们可以在以下文件夹内找到相关配置文件。
- /var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
- /etc/crontab 这个文件负责调度各种管理和维护任务。
- /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
- 还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期、月执行一次。
使用
常用的命令如下:
crontab [-u username] //username表示操作当前用户的crontab
-e (编辑工作表)
-l (列出工作表里的命令)
-r (删除工作作)
编辑任务列表
crontab -e
使用crontab -e
进入当前用户的工作表编辑,每一行都是一个定时任务。
crontab格式
crontab的命令构成为 时间+动作
时间构成
Linux
* * * * *
- - - - -
| | | | |
| | | | +----- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | +---------- month (1 - 12) OR jan,feb,mar,apr ...
| | +--------------- day of month (1 - 31)
| +-------------------- hour (0 - 23)
+------------------------- minute (0 - 59)
字段 | 是否必填 | 允许值 | 允许特殊字符 | 备注 |
---|---|---|---|---|
Minutes | 是 | 0–59 | * , - |
|
Hours | 是 | 0–23 | * , - |
|
Day of month | 是 | 1–31 | * , - |
|
Month | 是 | 1–12 or JAN–DEC | * , - |
|
Day of week | 是 | 0–7 or SUN–SAT | * , - |
Linux的允许值为0-7,0和7为周日 |
实例
- 每1分钟执行一次
test.sh
* * * * * test.sh
- 每小时的第3和第15分钟执行
3,15 * * * * test.sh
- 每一小时执行
0 */1 * * * test.sh
- 每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 test.sh
在Ubuntu 16.04上启动crontab
使用systemctl start cronb
启动crontab,发现如下报错
Failed to start cronb.service: Unit cronb.service not found.
因为Ubuntu 16.04上的服务名称是cron不是crond
使用systemctl start cron
,就正常启动了
检查Ubuntu的cron状态
ps -ef | grep cron
systemctl status cron.service
service cron status
/etc/init.d/cron status
以上四种方式都可以,出现active
表示cron正常运行