crontab 入门
使用前需要了解的:
1. crontab配置的命令需要crond守护进程的支持,用ps aux | grep crond命令检查crond是否运行,如果没安装就执行:yum install -y crons
2. crontab的所有编辑、查看、命令的运行信息、都可以在/var/log/cron日志文件中查看到
3. 用户通过crontab -e 编辑的定时任务,存放在 /var/spool/cron/ 目录下
4. crond守护进程每分钟去/etc/cron.d里面搜索配置文件,里面有一个0hourly文件,里面写了01 * * * * root run-parts /etc/cron.hourly。是每隔1小时去运行一次/etc/cron.hourly目录,该目录下面有一个0anacron文件,这样0anacron文件就能每小时运行一次。0anacron按照/etc/anacrontab文件里面的配置,将当前时间与/var/spool/anacron目录下面的文件里面的时间戳作对比,如果需要则去运行/etc/anacrontab对应的条目。这也是为什么/etc/anacrontab文件里面只定义了cron.daily、cron.weekly与cron.monthly,而没有定义cron.hourly,因为cron.daily、cron.weekly与cron.monthly其实是由cron.hourly调起来的。
配置目录结构:
/etc/cron.d 是系统自动定期需要做的任务,但是又不是按小时,按天,按星期,按月来执行的,那么就放在这个目录下面。如果是按小时,按天,按星期,按月的来执行的话,则可以放到相应的目录下面去。
/etc/cron.hourly 是每个小时执行一次的任务
/etc/cron.daily 是每天执行一次的任务
/etc/cron.weekly 是每个星期执行一次的任务
/etc/cron.monthly 是每月执行一次的任务
/etc/crontab 前四行是用来配置crond任务运行的环境变量。
第一行SHELL变量指定了系统要使用哪个shell,一般是bash。
第二行PATH变量指定了系统执行 命令的路径。
第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务 执行信息给用户
第四行HOME变量如果被忽略,cron 会使用调用者(用户)的家目录替代。
crontab 程序常用参数:
crontab file //用指定文件代替目前的crontab
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务(所有服务)
crontab -e //编辑某个用户的cron服务
比如查看root的cron设置:crontab -u root -l
root想删除fred的cron设置: crontab -u fred -r
如何配置时间操作符:
星号 (*) : 此操作符为字段指定所有可用的值。举个例子,在小时字段中,一个星号等同于每个小时;在月份字段中,一个星号则等同于每月。
逗号 (,) : 这个操作符指定了一个包含多个值的列表,例如:1,5,10,15,20,25.
横杠 (-) : 此操作符指定了一个值的范围,例如:5-15 ,等同于使用逗号操作符键入的 5,6,7,8,9,…,13,14,15。
分隔符 (/) : 此操作符指定了一个步进值,例如: 0-23/ 可以用于小时字段来指定某个命令每小时被执行一次。步进值也可以跟在星号操作符后边,如果你希望命令行每 2 小时执行一次,则可以使用 */2。
crontab 配置示例:
### 每隔 5 分钟运行一次 backupscript 脚本 ##
*/5 * * * * /root/backupscript.sh
### 每天的凌晨 1 点运行 backupscript 脚本 ##
0 1 * * * /root/backupscript.sh
### 每月的第一个凌晨 3:15 运行 backupscript 脚本 ##
15 3 1 * * /root/backupscript.sh
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
### 上面的例子表示每晚的21:30重啟lighttpd 。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
### 上面的例子表示每月1、10、22日的4 : 45重啟lighttpd 。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
### 上面的例子表示每周六、周日的1 : 10重啟lighttpd 。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
### 上面的例子表示在每天18 : 00至23 : 00之間每隔30分鐘重啟lighttpd 。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
### 上面的例子表示每星期六的11 : 00 pm重啟lighttpd 。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
### 每一小時重啟lighttpd
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
### 晚上11點到早上7點之間,每隔一小時重啟lighttpd
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
### 每月的4號與每周一到周三的11點重啟lighttpd
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
### 一月一號的4點重啟lighttpd
使用特殊符号:
@reboot 在每次启动时运行一次
@yearly 每年运行一次,等同于 “0 0 1 1 *”.
@annually (同 @yearly)
@monthly 每月运行一次, 等同于 “0 0 1 * *”.
@weekly 每周运行一次, 等同于 “0 0 * * 0”.
@daily 每天运行一次, 等同于 “0 0 * * *”.
@midnight (同 @daily)
@hourly 每小时运行一次, 等同于 “0 * * * *”.