日期:2014-05-16  浏览次数:20649 次

linux定时运行命令

在Ubuntu 10.04下,cron是被默认安装并启动的。通过/etc/crontab文件,可以看到以下内容:

SHELL=/bin/sh???? #设置SHELL系统变量
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 ) #执行每月的任务脚本

?

可以通过以下命令启动/停止等操作cron服务,(有些系统下的命令可能是crond,根据实际情况来使用命令)

sudo cron start //启动服务
sudo cron stop //关闭服务
sudo cron restart //重启服务
sudo cron reload //重新载入配置

?

直接用crontab命令编辑任务

crontab命令有三种形式的命令行结构:
crontab [-u user] [file]
crontab [-u user] [-e|-l|-r]
crontab -l -u [-e|-l|-r]
第 一个命令行中,file是命令文件的名字。如果在命令行中指定了这个文件,那么执行crontab命令,则将这个文件拷贝到crontabs目录下;如果 在命令行中没有制定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将他们也存放在crontab目录下。
cron服务提供crontab命令来设定cron服务的,以下是一些参数与说明:
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除没个用户的cron服务
crontab -e //编辑某个用户的cron服务
比如说root查看自己的cron设置:crontab -u root -l
再例如,root想删除fred的cron设置:crontab -u fred -r
在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e

?

以下是 crontab 文件的格式:

{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}

# .---------------- minute (0 - 59)?
# |??.------------- hour (0 - 23)
# |??|??.---------- day of month (1 - 31)
# |??|??|??.------- month (1 - 12) OR jan,feb,mar,apr ...?
# |??|??|??|??.---- day of week (0 - 6) (Sunday=0 or 7)??OR
#sun,mon,tue,wed,thu,fri,sat?
# |??|??|??|??|
# *??*??*??*??*??command to be executed

?

# m h? dom mon dow?? command

16 19? *? *?? *?? root echo "hello"?? #每天19:16 执行echo "hello"

第一到第五个字段的整数取值范围及意义是:
??? 0~59 表示分
??? 1~23 表示小时
??? 1~31 表示日
??? 1~12 表示月份
??? 0~6 表示星期(其中0表示星期日)

?

示例如下:

每小时执行/etc/cron.hourly内的脚本
01 * * * * root run-parts /etc/cron.hourly
每天执行/etc/cron.daily内的脚本
02 4 * * * root run-parts /etc/cron.daily
每星期执行/etc/cron.weekly内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly
每月去执行/etc/cron.monthly内的脚本?
42 4 1 * * root run-parts /etc/cron.monthly

注意: "run-parts"这个参数了,如果去掉这个参数的话,后面就是要运行的某个脚本名(可能要指定全路径),而不是文件夹名。?

?

在每个时间字段中可以使用逗号隔开多个时间段, 示例如下:
每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。?
5,15,25,35,45,55???? 16,17,18?? * * *? command

每周一,三,五的下午3:00系统进入维护状态,重新启动系统。
00 15 * * 1,3,5 shutdown -r +5

?

使用crontab实现每天指定关机

$ sudo vim /etc/crontab

#在该文件中添加如下命令

30 23 ? * * *?? root??? poweroff???? #每天23:30关闭计算机

编辑完配置文件后,如果要立即生效就需要使用命令重启cron服务

$sudo restart cron