定时任务
Linux常见的定时任务有两种类型:
- 一种是一次性的定时任务,只在指定时间执行一次后即销毁
- 一种是周期性的定时任务,会以指定的周期循环执行
一次性的定时任务对应的命令为at,周期性的定时任务对应的命令为crontab。
at
at使用的并不多,格式也较为简单.
at [时间]
例如:
at now + 3 min
warning: commands will be executed using /bin/sh
at> echo helloworld # 进入at交互式模式,这里输入要执行的命令
at> <EOT> # 这里按下键盘的CTRL-D结束输入
job 5 at Wed Jan 13 11:58:00 2016 # 这里列出job的ID以及执行的时间
想一想: 如果要非交互式键入
at任务应该怎么办?
atq可以列出当前已经定义的job。atrm jobID可以直接删掉已经定义的jobat -c jobID可以显示job执行的脚本
crontab
crontab是系统管理员最常用的定时任务,用于周期性的执行某个命令,如检测系统状态,备份数据等等。
crontab需要编写配置文件,写明任务周期,执行用户,执行的命令 这些参数。
与crontab相关的配置文件如下:
/etc/crontab: 主配置文件/etc/cron.d/: 辅配置文件, 格式与主配置文件相同/etc/cron.daily/: 每日执行一次的程序/etc/cron.weekly/: 每周执行一次的程序/etc/cron.hourly/: 每小时执行一次的程序/etc/cron.monthly/: 每月执行一次的程序/var/spool/cron/crontabs/$USER: 每个用户单独的定时任务,这个文件里没有 执行用户 这个字段(crontab命令编辑的是这个文件)
/etc/crontab|/etc/cront.d/文件格式像这样:
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
crontab -e命令会调用编辑器编辑/var/spool/cron/crontabs/$USER这个文件,
和visudo的行为一样,并不会直接编辑目标文件,而是在/tmp/创建一个临时文件编辑,
之后会对格式检测,格式正确才会替换目标文件。
crontab -e的格式像这样(注意没有user字段):
# m h dom mon dow command
* * * * * echo hello world
TIPS:
crontab的非交互式执行:
crontab -l | crontab -
每个时间字段可用的格式:
*: 代表本字段所有可用范围m-n: 代表m-n范围n,m, ...: 代表几个不连续的值*/n: 指定步长为n,*可替换为其他有效范围
常用的crontab格式:
* * * * *: 每分钟0 * * * *: 每小时*/2 * * * *: 每2分钟1-59/2 * * *: 分钟为奇数
TIPS: 一个很不错的在线crontab验证: http://www.atool.org/crontab.php