表格: Crontab 字段与允许的值 (Linux Crontab)
字段 | 描述 | 允许的值 |
---|---|---|
分钟 | 一小时的第几分 | 0-59 |
小时 | 一天的第几小时 | 0-23 |
日期 | 一个月的的第几天 | 1-31 |
月份 | 一年的第几个月 | 1-12 |
周几 | 一周的第几天 | 0-6 |
命令 | 命令 | 可以被执行的任何命令 |
cron的基本用法是在特定的时间执行一项任务,如下是6月10上午8:30执行Full backup shell script。
要注意的是时间字段采用的是24小时制,如果是下午8点,则改写为20点。
1
|
30 08 10 06 * /home/ramesh/full-backup
|
下面的增量备份脚本每天执行两次,每天于11:00,16:00执行。
逗号两侧的时间都会执行。
1
|
00 11,16 * * * /home/ramesh/bin/incremental-backup
|
下面这个例子是每天9:00-16:00检查数据库状态(包括周六):
1
|
00 09-18 * * * /home/ramesh/bin/check-db-status
|
如果只想工作日执行此操作:
1
|
00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
|
查看当前用户定时任务:
1
|
ramesh@dev-db$ crontab -l
|
查看ROOT用户定时任务,用root登入su-root,再执行crontab -l:
1
2
|
root@dev-db# crontab -l
no crontabforroot
|
查看其它用户定时任务:
1
2
3
|
root@dev-db# crontab -u sathiya -l
@monthly /home/sathiya/monthly-backup
00 09-18 * * * /home/sathiya/check-db-status
|
1
|
ramesh@dev-db$ crontab -e
|
理论情况下,没有每分钟都要执行的shell,但下面这个例子,让我们更好的了解crontab。
1
|
* *
* * * 命令
|
*代表着所有可能取到的值,除了直接用*外,下面的几种情况也较为常用:
上面的例子对于其它四个字段同样试用
1
|
*/10 * * * * /home/ramesh/check-disk-space
|
有一些特殊的例子,可以用关键字替代上述五个字段–reboot, midnight, yearly, hourly
表格: Cron 关键字与其意义
关键字 | 等效于 |
---|---|
@yearly | 0 0 1 1 * |
@daily | 0 0 * * * |
@hourly | 0 * * * * |
@reboot | 重启时运行 |
下面的例子将在每一年的1月1日0:00执行:
1
|
@yearly /home/ramesh/red-hat/bin/annual-maintenance
|
下面的例子将在每月1日0:00执行:
1
|
@monthly /home/ramesh/suse/bin/tape-backup
|
下面的例子将在每天0:00执行:
1
|
@daily /home/ramesh/arch-linux/bin/cleanup-logs"day started"
|
1
|
@reboot CMD
|
默认情况下,crontab将向布置定时任务的管理员发送邮件,如果想重定向此用户,添加并更新MAIL。
1
2
3
4
5
|
ramesh@dev-db$ crontab -l
MAIL="ramesh"
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space
|
如果不想任何人接收,则直接将MAIL置空。
无法安排每秒执行,因为最小处理单元是分钟,另一方面,没有什么理由让我们每秒都执行一任务。
上面的例子都是用绝对的路径,如果你想用相对的路径,设置环境变量可以在crontab增加:
1
2
3
4
5
6
|
ramesh@dev-db$ crontab -l
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/ramesh
@yearly annual-maintenance
*/10 * * * * check-disk-space
|
除了直接编辑外,你也可以先在一个文件中编辑好任务,再导入:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
ramesh@dev-db$ crontab -l
no crontabforramesh
$ cat cron-file.txt
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space
ramesh@dev-db$ crontab cron-file.txt
ramesh@dev-db$ crontab -l
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space
|
应用时要注意,此操作会删除原有的cron任务。