1、计划任务概说;
计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到 crond
服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的作务。比如我们可以在配置文件中约定每天早上4点,对httpd
服务器重新启动,这就是一个计划任务;
下面我们先来说说cron;
在Linux系统中,计划任务一般是由cron承担,我们可以把cron设置为开机时自动启动。cron启动后,它会读取它的所有配置文件(全局性配置文件/etc/crontab,以及每个用户的计划任务配置文件),然后cron会根据命令和执行时间来按时来调用度工作任务。
2 cron
的安装和启动
在一般情况下,cron都是系统默认安装的,我们要学会查看软件包是否已经安装:
查看是否安装:
[root@localhost ~]# rpm -qa |grep cron
vixie-cron-4.1-54.FC5
anacron-2.3-36.1
crontabs-1.10-7.1
其中vixie-cron软件包是cron的主程序,您可以通过下面的命令来了解它,其它软件包同理;
[root@localhost
beinan]# rpm -ql vixie-cron
crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。cron 守护进程检查
crontab
文件来查看某个指定命令被调度执行的时间。如果命令已经调度,守护进程就会执行它们。了解crontabs软件包都安装了些什么,应该用下面的命令;
[root@localhost
beinan]# rpm -ql crontabs
如果没有安装,可以从光盘中找出文件名带有cron字样的软件包来安装。
安装:
[root@localhost ~]# rpm -ivh
vixie-cron-4.1-54.FC5*
[root@localhost ~]# rpm -ivh crontabs*
也可以用yum 来在线安装;
[root@localhost ~]# yum install vixie-cron
[root@localhost ~]# yum install crontabs
启动:
第一种 在Fedora或Redhat 等以RPM包管理的系统中:
[root@localhost ~]# /etc/init.d/crond start
[root@localhost ~]# /etc/init.d/crond stop
[root@localhost ~]# /etc/init.d/crond restart
或者:
启动cron服务 /sbin/service crond start
停止服务 /sbin/service crond stop
重启服务 /sbin/service crond restart
重新加载 /sbin/service crond reload
如果想在Fedora 和 Redhat
或以这些发行版为基础克隆的发行版,如果想自动开机运行,请用下面的办法:默认是开机启动的
[root@localhost ~]# chkconfig --levels 35
crond on
第二种:通用
[root@localhost ~]# pgrep crond 注:判断crond
是否在运行;
[root@localhost ~]# pkill crond 注:杀掉正在运行中的crond;
[root@localhost ~]# pgrep crond 注:查看是否被杀掉了;
[root@localhost ~]# /usr/sbin/crond 注:运行crond;
3 配置cron
全局性配置文件是/etc/crontab
1.可以使用的用户
默认情况下,系统中可以登陆的用户,都可以使用crontab定义计划任务。不过,可以通过下面两个文件限制权限:
◆/etc/cron.allow:
将可以使用 crontab 的账号写入其中,若不在这个档案内的使用者则不能使用 crontab;
◆/etc/cron.deny:
将不可以使用 crontab 的账号写入其中,若未记录到这个档案当中的使用者,就可以使用 crontab 。
2.直接编辑全局配置文件( 编辑他不要重启服务)
默认是这样子的:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly 注:表示每个小时的第一分钟,开始执行/etc/hourly目录下的可执行程序或脚本
02 4 * * * root run-parts
/etc/cron.daily 注:表示每天的4点2分,开始执行/etc/cron.daily目录下的可执行程序或脚本;
22 4 * * 0 root run-parts /etc/cron.weekly 注:每年第7个周4点我22分,开始执行 /etc/cron.weekly目录下的可执行程序或脚本;
42 4 1 * * root run-parts /etc/cron.monthly 注:每月第1天的4点42分,开始执行/etc/cron.monthly目录下的可执行程序或脚本;
可以看到前面的五个参数的定义和直接编辑计划任务是一样的,增加了执行的用户定义和run-parts参数。
run-parts后面跟的是目录名称,目录是可以自己定义的。
如果你需要增加系统的计划任务,只需要在对应的目录添加执行文件即可
※同样的,如果不需要使用目录的方式,也可以使用如下的方式:
02 01 * *
* root /root/test.sh 也就是没有了run-parts,后面就直接跟命令的绝对路径
上面这几个目录这些行是用来在同一时间批量执行任务的,同一时间执行多个脚本,把这些脚本放到相应的目录下,到时就会依次执行。
3 书写格式
分钟 小时
日 月 周 [用户名] 命令
说明:
第一段应该定义的是:分钟,表示每个小时的第几分钟来执行。范围是从0-59
第二段应该定义的是:小时,表示从第几个小时来执行,范围是从0-23
第三段应该定义的是:日期,表示从每个月的第几天执行,范围从1-31
第四段应该定义的是:月,表示每年的第几个月来执行,范围从1-12
第五段应该定义的是:周,表示每周的第几天执行,范围从0-6,其中 0表示星期日。
每六段应该定义的是:用户名,也就是执行程序要通过哪个用户来执行,这个一般可以省略;
第七段应该定义的是:执行的命令和参数。
4 直接用命令编辑
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
5 几个特殊符号的含义:
"*"代表取值范围内的数字, "/"代表"每", "-"代表从某个数字到某个数字, ","分开几个离散的数字
6 例子:
5 * * * * ls 指定每小时的第5分钟执行一次ls命令
30 5 * * * ls 指定每天的 5:30 执行ls命令
30 7 8 * * ls 指定每月8号的7:30分执行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]
30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
25 8-11
* * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令。 ]
每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件
50 7 * * * root run-parts /etc/cron.daily [
注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]
注意事项:
◆当编写/etc/crontab文件的时候,不要漏了指定执行计划任务的用户,这是和直接用crontab -e编辑不同的。
◆某用户(如root)用crontab
-e编辑的计划任务存放在/var/spool/cron/root,这个文件下。但最好不要直接编辑他,因为crond执行的时候,会在/tmp目录中建立需要的临时文件,直接编辑会对此有影响,甚至出错。
◆cron执行的每一项工作都会被纪录到/var/log/cron这个日志文件中,可以从这个文件查看命令执行的状态。