Linux系统下使用crontab添加计划任务的方法



在服务器中添加按期执行的任务,在不少状况下是很是必要的。好比,天天清理一次/tmp目录下的文件;没几分钟检查某一守护进程是否正常等等。这样计划任务就显得尤其方便。下面将介绍如何在Linux系统中添加计划任务。html

1、什么是Crontab
简而言之,Crontab提供了容许给定的任务以必定的间隔在后台运行的机制。须要注意的是,并非全部的系统都支持Crontab,须要和系统管理员联系,可是至少大部分应该是支持的。服务器

2、Crontab如何工做
一个Cron计划就是一个文本文件,系统以及每个用户都有他们本身的Cron计划。
对于用户的Cron计划,都会存放到/var/spool/cron/crontabs目录中,可是系统不容许用户直接对该文件进行修改,而是必须经过如下命令修改:dom

crontab -e

使用命令crontab -u user -e命令编辑用户user的cron(c)做业。用户经过编辑文件来增长或修改任何做业请求。
有的系统能够容许用户选择使用哪一种文本编辑器对该文件进行修改,也有的只容许默认使用vi编辑器。
cron计划文件中的每一行只多是如下三种中的任意一种:注释(以#开头)、空行和任务。
每一条计划任务至少包含六个部分,每个部分之间以一个(必须是一个,很少很多)空格隔开,可是最后一个部分中容许包含空格。
前五个部分规定了该任务运行的时间。编辑器

须要注意的是,这个时间是采用了系统时间,而不是太平洋标准时间ide

每个部分的意义以下:this

field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)

前五个部分的语法参考下边的例子,最后一个部分时间到达的时候要执行的命令。url

crontab的用户手册中推荐每个命令使用绝对路径,例如调用rm命令时写做:/bin/rm,这是为了防止因为每个用户的PATH环境变量不一样而致使命令没法找到的错误spa

3、一些例子
(1) 手册中的例子rest

# 在天天的00:05AM执行
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# 在每个月1日的02:15PM执行
15 14 1 * * $HOME/bin/monthly
# 在工做日(周一到周五)的10:00PM执行
0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
# 在0-23小时区间内,每两小时执行一次,即0点,2点,...,22点,在这些时间以后的23分钟执行
23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
# 每周日的04:05AM执行
5 4 * * sun echo "run at 5 after 4 every sunday"
# 在每月的第二个周六的04:00AM执行
0 4 8-15 * 6 test $(date +u) -eq 6 && echo "2nd Saturday"
(2) 预约义任务的前五个部分能够由如下左边字符串代替,右边为其解释:
string meaning
------ -------
@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".
4、系统的Cron计划
系 统的Cron计划文件存放在/etc/crontab路径下。与用户的crontab文件不一样,root用户能够直接对该文件进行修改,而不用使用 crontab -e命令。除此以外,系统crontab文件中任务的定义也有所不一样,在前五个部分以后插入了一个“用户”部分。如下是个人/etc/crontab文 件:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# 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 )
#

5、使设置生效
设置完成后,重启cron便可使设置的计划任务定时执行了,重启命令以下:htm

service crond restart