Linux_Cronjob_blog

来源:互联网 发布:久坐肚子大 知乎 编辑:程序博客网 时间:2024/06/01 08:19

Linux_Cronjob

12/22/2015 8:57:35 PM
[toc]

before cronjob

任务计划、周期性任务    未来的某事情执行、一次性任务:at、batch    周期性执行任务:crontab        执行结果会通过邮件发送给用户    netstat -ntlp本地电子邮件服务    smtp:simple mail transmission protocol    pop3:Post Office Protocol    imap4:Internet Mail Access Protocol

mail(mailx)

mailx:send and receive Internet mail    mail [-s 'SUBJECT'] username[@hostname]        邮件正文的生成:            - 交互式输入;.单独成行可以表示正文结束,或者Ctrl+d提交            - 通过输入重定向            - 通过管道    mail        直接收取邮件            \#:查看第#份邮件            q:退出邮件查看

mail

计划任务

at命令

at [OPTION]... TIME    TIME:        HH:MM:[YYYY-mm-dd]        noon,midnight,teatime        tomorrow        now+#            Units:minutes,hours,days,OR weeks            Ctrl+d提交任务    -l:        <==> atq    -f /PATH/TO/JOBSCRIPT:        通过文件提交作业    -d #:删除指定作业,atrm #    -c #:查看指定作业的具体内容,#为job编号    -q QUEEN:指明队列,,b,c,d等
[root@localhost ~]# at -q b now+2hoursat> cat /etc/issue     at> rm -rf /tmp/*<EOT>job 1 at 2015-12-11 07:47You have mail in /var/spool/mail/root[root@localhost ~]# atq1       2015-12-11 07:47 b root[root@localhost ~]# at -l1       2015-12-11 07:47 b root
提交后的作业格式为:(如:job 1 at 2015-12-11 07:47)    作业序号 作业提交时间 作业队列 作业用户        作业队列:默认都使用a队列

注意:

at -c命令会显示出了命令本身以外这个命令运行的用户环境,比如环境变量等,如果用户没有登陆就使用默认环境

作业的执行结果会通过邮件发送给提交作业的用户

batch命令

batch命令和at命令类似,只不过batch命令会让系统自动选择在系统资源较空闲的时间去执行指定的任务

cronjob

服务程序cronie

cronie
cronie是cronjob的主程序包,提供了crond守护进程及相关辅助工具

deamon crond

\#确保crond守护进程deamon处于运行状态\# CentOS6[root@localhost ~]# rpm -qa croniecronie-1.4.4-15.el6.x86_64[root@localhost ~]# service crond statuscrond (pid  2228) is running...\# CentOS7[root@localhost ~]# systemctl status crond.service
向crond提交作业的方式不同于at,它需要使用专门的配置文件,此文件有固定格式,不建议使用文本编辑器直接编辑此文件;要使用crontab命令每提交一个cronjob,就会在相应的/etc/cron.*/目录下添加任务,这个任务不是在其中的文件中可以查看的

分类

系统cronjob

主要用于实现系统自身的维护,只能手动编辑这类任务:[root@localhost ~]# vim /etc/crontab


- 每一行定义一个周期性任务,一共7个字段
* * * * *:定义周期性时间
username:运行任务的用户身份
command to be executed:任务
- 此处的环境变量不同于用户登陆后获得的环境,因此,命令使用绝对路径,或者自定义PATH环境变量
- 执行结果邮件发送给MAILTO指定的用户

用户cronjob

用户cron的配置格式:/etc/spool/cron/USERNAME    在用户没有使用crontab的时候,上述文件是不存在的,只有设定了计划任务才有上述文件crontab命令    crontab [-u user] [-l | -e][-i][-s]        -e:编辑任务        -l:列出所有任务        -r:移除所有任务;即删除/var/spool/cron/USERNAME            删除单个任务使用-e去编辑        -i:在使用-r选项移除所有任务时提示        -u:root用户可为指定用户管理cron任务    注意:运行结果以邮件通知给当前用户,如果把结果给/dev/null,如果出现问题管理员难以发现    注意:定义COMMAND时,如果命令中存在%符号,需要对其转义;或者使用单引号''括起来。

计划时间

  • 特定值
    给定时间点有效取值范围内的值:
    注意:day of week和day of month一般不同时使用
  • *
    给定时间点上有效取值范围内的所有值,比如minute字段为*表示0-59
  • 离散时间
    在时间点上使用逗号分隔的多个值
    #,#,#
  • 连续时间
    在时间点上使用-连接开头和结束
    #-#
  • 在指定时间点上,定义步长./
    /#:#就是步长

**注意:指定的时间不能被步长整除时,其意义将不复存在,最小时间单位是分钟,完成秒级任务,需要额外机制,比如shell中的循环,即定义成每分钟任务:再利用脚本实现在每分钟之内,循环执行多次

例子

  1. 3 * * * *:每小时执行一次,每小时的第三分钟
  2. 3 4 * * 5:每周执一次,周五的四点三分执行
  3. 5 6 7 * *:每月执行一次,每月7号的6点5分执行
  4. 7 8 9 10 *:每年执行一次,每年的10月九号8点7分
  5. 9 8 * * 3,7:每周三和周日的8点9分
  6. 0 8,20 * * 3,7:每周三和周日的8点和12点执行一次
  7. 0 9-18 * * 1-5:周一到周五的白天的9:00,10:00,…18:00执行一次
  8. /5 * * *:每5分钟执行一次某任务
  9. /7 * * *:没有意义
  10. 某任务在指定的时间因关机未能执行,下次开机会不会自动执行?
    绝对不会执行!
    如果期望时间因故未能按时执行,下次开机后无论是否到了相应时间点都要执行一次,可使用anacron实现;
  11. 每12小时备份一次/etc目录至/backups目录中,保存文件名称格式为”etc-yyyy-mm-dd-hh.tar.xz”
0 */12 * * * root /bin/tar -PJcf /backups/etc-`date +%F-%H` /etc

几点注意:/bin/tar要使用绝对路径+tar命令的-P选项+命令引用
12. 每周2、4、7备份/var/log/secure文件至/log目录中,文件名格式为”secure-yyyymmdd”

0 0 * * 2,4,7 root /bin/tar -PJcf /log/secure-`date +%Y%m%d`.tar.xz /var/log/secure
  1. 每两小时取出当前系统/proc/meminfo文件中以S或M开头行信息追加至/tmp/meminfo.txt文件中
0 */2 * * * root /bin/grep '^[MmsS].*' /proc/meminfo >> /tmp/meminfo.txt

注意:每一个cronjob在配置之前,都要亲自试验一边,否则,如果出错了,自己还以为是对的,这样会造成严重的后果

anacron

crontab可以指定计划任务,但是如果服务器在指定时间宕机或者没有启动,那么这个cronjob还会执行以前时间的计划吗?答案是**NO,crontab会以新一轮的时间开始执行**.这也就是为什么会有anacron。anacron并不能取代cron去运行某项任务,而是以天为单位或者是在启动后立刻进行anacron的动作,它会去侦测停机期间应该进行但是并没有进行的crontab任务,并将该任务运行一遍后,anacron就会自动停止了。因此,anacron也是通过crontab来执行工作的,它只是为crontab提供了保障。## /etc/anacrontab - configuration file for anacron


这个文件在安装系统是就存在默认的配置。
其中字段有两种形式:
period delay job-identifier command
@period_name delay job-identify command
图片中第一行解释为:每天开机5分钟后就检查cron.daily文件是否被执行了,如果今天没有被执行就执行他它
图片中第二行解释为:每隔7天开机后25分钟检查cron.weekly文件是否被执行了,如果一周内没有被执行就执行它
图片中第二行解释为:每隔一个月天开机后45分钟检查cron.monthly文件是否被执行了,如果一个月内没有执行就执行它

0 0
原创粉丝点击