【转载】RHEL系统crontab计划任务管理

在Linux操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务。在RHEL、CentOS等大多数Linux系统中,默认已经安装了at、cron软件包,通过atd和crond这两个系统服务实现一次性和周期性计划任务的功能。其结合shell脚本,可以实现系统自动化管理.
1.at一次性任务设置:使用at命令设置的计划任务只在指定的时间点执行一次,有一个前提条件是,对应的系统服务atd必须已经运行。 /etc/init.d/atd
设置格式:at  [HH:MM]  [yyyy-mm-dd]
使用at命令设置计划任务时,在命令行中依次指定计划执行任务的时间、日期作为参数,确认后将进入带at>提示符的任务编辑界面,每行设置一条命令,可以依次设置多条命令,最后按ctrl+D提交任务即可。所设置的命令操作将在计划的时间点被依次执行。
需要注意的是,计划执行任务的时间、日期必须确保在当前系统的时刻之后,否则将无法正确设置计划任务。
例如:使用date命令确认当前的系统时间,并设置在系统时间之后自动执行一下计划任务:统计该时间点系统中由root用户运行的进程的数量,并将该数量值保存到/tmp/ps.root文件中。
[root@localhost /]# at 21:30 2011-12-16
at> pgrep -U root | wc -l > /tmp/ps.root
at> <EOT>                         //任务设置完毕后按ctrl+d组合键提交
job 1 at 2011-12-16 21:30
例如:设置在当前24:00时自动关闭当前系统
[root@localhost /]# at 24:00
at> shutdown -h now
at> <EOT>
job 2 at 2011-12-16 00:00
对于已经设置但还尚未执行(未到时间点)的计划任务,可以通过atq命令进行查询。已执行过的at任务将不会再出现在列表中。
例如:查询当前系统中设置的at计划任务列表
[root@localhost /]# atq
1       2011-12-16 21:30 a root
2       2011-12-16 00:00 a root
使用atrm命令可以删除指定任务编号的at任务,删除后的at任务将不会被执行,并且不会显示在atq命令的显示结果中。已经执行过的任务无法删除。
例如:删除计划于24:00分执行的关机任务
[root@localhost /]# atq
1       2011-12-16 21:30 a root
2       2011-12-16 00:00 a root
[root@localhost /]# atrm 2
[root@localhost /]# atq
1       2011-12-16 21:30 a root
2.crontab周期性任务设置
使用crontab命令设置的计划任务可以按预设的周期重复执行,可以大大减轻设置重复性系统管理任务的操作(如定期备份)。启用周期性任务也有一个前提条件,即对应的系统服务crond必须已经运行。
& crontab的配置文件和目录
crontab通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件进行设置。
1)/etc/crontab 系统任务配置文件:此文件中设置的是维护Linux系统所需的任务,一般在系统及程序安装时自动设置,不需要人为地修改。全局配置文件。
例如:查看/etc/crontab系统计划任务配置文件的内容
[root@localhost /]# cat /etc/crontab
SHELL=/bin/bash                      //设置执行计划任务的Shell环境
PATH=/sbin:/bin:/usr/sbin:/usr/bin         //定义可执行命令及程序的路径
MAILTO=root                         //将任务输出信息发送到指定用户的邮箱
HOME=/                              //执行计划任务时使用的主目录
# run-parts                        
01 * * * * root run-parts /etc/cron.hourly     //设置每小时执行的计划任务
02 4 * * * root run-parts /etc/cron.daily      //设置天执行的计划任务
22 4 * * 0 root run-parts /etc/cron.weekly    //设置每周执行的计划任务
42 4 1 * * root run-parts /etc/cron.monthly   //设置每月执行的计划任务
例如:确认/etc/crontab 文件中设置的对应任务脚本的目录内容
[root@localhost /]# cd /etc/
[root@localhost etc]# ls cron.hourly/ cron.daily/ cron.weekly/ cron.monthly/
cron.daily/:                                           //该目录中存放每天运行的任务脚本
00webalizer  0logwatch  cups       makewhatis.cron  prelink  tmpwatch
0anacron     certwatch  logrotate  mlocate.cron     rpm
cron.hourly/:                                           //该目录中存放每小时运行的任务脚本
cron.monthly/:                                          //该目录中存放每月运行的任务脚本
0anacron
cron.weekly/:                                           //该目录中存放每周运行的任务脚本
0anacron  99-raid-check  makewhatis.cron
2)/var/spool/cron:用户cron任务配置存放目录
由用户自行设置(使用crontab命令)的cron任务将被保存在目录/var/spool/cron/中,文件名与对应的用户账号同名
crond守护进程每分钟都会检查/etc/crontab文件、/etc/crond/目录以及/var/spool/cron/目录中的改变,如果发现有配置更改,它们就会被载入内存,所以当某个crontab文件改变后并不需要重新启动crond守护进程就可以使设置生效。
&使用crontab命令管理用户的计划任务
设置用户的周期性计划任务列表主要通过crontab命令进行,结合不同的选项可以完成不同的计划任务管理操作。常用的选项如下。
> -e:编辑计划列表
> -u:指定所管理的计划任务属于哪个用户,默认时针对当前用户,一般只有root用户有权限使用此选项(用于编辑、删除其他用户的计划任务)
> -l:列表显示计划任务
> -r:删除计划任务列表
编辑计划任务:crontab  -e  [-u  用户名]
查看计划任务:crontab  -l  [-u  用户名]
删除计划任务:crontab  -r  [-u  用户名]
1)编辑用户的计划任务列表:执行crontab -e 命令后,将打开计划任务编辑界面(与vi中的操作相同)。通过该界面用户可以自行添加具体的任务配置,每行代表一个记录,配置的格式与/etc/crontab文件中的主体部分类似。
每一行任务配置记录,都包括6个数据字段,分别表示不同的含义

由于各字段的作用不同,其取值范围也不一样,当使用 * 时表示取值范围中的所有时间。crontab任务配置记录中所设置的命令将在 分钟+小时+日期+月份+星期都满足的条件下运行
除了 * 以外,还可以使用减号"-"、逗号 ","、斜杠"/"与数字构成表达式来表示较复杂的时间关系。
> 减号 - :可以表示一个连续的时间范围,如1~4表示整数1、2、3、4.
> 逗号 ,:可以表示一个间隔的不连续范围,如3,4,6,8
> 斜杠符号/:可以用来指定间隔频率,如在日期字段中的*/3表示每隔三天
例如:应用示例
0  17  *  *  1-5 周一到周五每天17:00
30  8  *  *  1,3,5 每周一、三、五的8点30分
0  8-18/2  *  *  * 8点到18点之间每隔2小时
0  *  */3  *  * 每隔3天
例如:由root用户设置一份crontab计划任务表,希望完成如下任务。
每天早上7:50自动开启sshd服务,22点50时关闭
每隔5天清空一次FTP服务器公共目录/var/ftp/pub
每周六的7:30时,重新启动httpd服务
每周一、三、五的17:30时,打包备份/etc/httpd目录
[root@localhost /]# crontab -e
50 7 * * * /sbin/service sshd start
50 22 * * * /sbin/service sshd stop
0 * */5 * * /bin/rm -rf /var/ftp/pub/*
30 7 * * */6 /sbin/service httpd restart
30 17 * * 1,3,5 /bin/tar jcf httpdconf.tar.bz2 /etc/httpd
例如:每周日晚上23:55时将“/etc/passwd”文件的内容复制到宿主目录中,保存为pwd.txt文件
[root@localhost /]# crontab -e -u jerry
55 23 * * 1,3,5 /bin/cp /etc/passwd /home/jerry/pwd.txt
因各条计划任务在执行时并不需要用户登录,所以在任务配置记录中的命令建议使用绝对路径。另外,在设置非每分钟都执行的任务时,分钟字段也应该填写一个具体的时间数值,而不要保留为默认的* ,否则将会在没分钟执行一次计划任务。
2)查看用户的计划任务列表
例如:确认root用户的计划任务列表的内容
[root@localhost /]# crontab -l
50 7 * * * /sbin/service sshd start
50 22 * * * /sbin/service sshd stop
0 * */5 * * /bin/rm -rf /var/ftp/pub/*
30 7 * * */6 /sbin/service httpd restart
30 17 * * 1,3,5 /bin/tar jcf httpdconf.tar.bz2 /etc/httpd
例如:确认jerry用户的计划任务列表
[root@localhost /]# crontab -l -u jerry
55 23 * * 1,3,5 /bin/cp /etc/passwd /home/jerry/pwd.txt
3)删除用户的计划任务列表
例如:使用jerry用户登录后,查看并删除自己的计划任务列表
[jerry@localhost ~]$ crontab -l
55 23 * * 1,3,5 /bin/cp /etc/passwd /home/jerry/pwd.txt
[jerry@localhost ~]$ crontab -r
[jerry@localhost ~]$ crontab -l
no crontab for jerry
在设置更复杂的系统管理任务操作时,可以将相关命令编写成脚本文件,然后再计划任务配置中加载该脚本并执行
欢迎转载,本文标题:RHEL系统crontab计划任务管理,转载请注明原文网址:
http://www.55linux.com/base/2012071231.html
技术交流群:97403776
(责任编辑:admin)

posted on 2012-12-07 15:48  comeby  阅读(1274)  评论(0编辑  收藏  举报