zoukankan      html  css  js  c++  java
  • 【转载】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)

  • 相关阅读:
    Linux I2C设备驱动编写(一)
    Device Tree常用方法解析
    Linux查看CPU型号及内存频率及其它信息的命令
    编译错误error: invalid storage class
    Mysql技术内幕——表&索引算法和锁
    mysql 锁
    MySQL 索引方式
    通过show status 来优化MySQL数据库
    linux shell 字符串操作(长度,查找,替换)详解
    bash中将字符串split成数组的方法
  • 原文地址:https://www.cnblogs.com/bo083/p/2807431.html
Copyright © 2011-2022 走看看