定时任务
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