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:退出邮件查看
计划任务
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是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中的循环,即定义成每分钟任务:再利用脚本实现在每分钟之内,循环执行多次
例子
- 3 * * * *:每小时执行一次,每小时的第三分钟
- 3 4 * * 5:每周执一次,周五的四点三分执行
- 5 6 7 * *:每月执行一次,每月7号的6点5分执行
- 7 8 9 10 *:每年执行一次,每年的10月九号8点7分
- 9 8 * * 3,7:每周三和周日的8点9分
- 0 8,20 * * 3,7:每周三和周日的8点和12点执行一次
- 0 9-18 * * 1-5:周一到周五的白天的9:00,10:00,…18:00执行一次
- /5 * * *:每5分钟执行一次某任务
- /7 * * *:没有意义
- 某任务在指定的时间因关机未能执行,下次开机会不会自动执行?
绝对不会执行!
如果期望时间因故未能按时执行,下次开机后无论是否到了相应时间点都要执行一次,可使用anacron实现; - 每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
- 每两小时取出当前系统/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文件是否被执行了,如果一个月内没有执行就执行它
- Linux_Cronjob_blog
- JAVA:Collections类的shuffle()方法
- test
- php下使用 $_FILE
- 将python程序做成一个服务
- 基于duilib的多标签简易浏览器
- Linux_Cronjob_blog
- asp中遇到的几个问题——数据库连接,几个常见控件的使用问题及其解决
- JUnit多线程Test
- SSH工具无法连接VMware上的linux虚拟机解决办法
- iOS中GCD的基本使用
- UI01_UILabel
- 2-5-归并链式存储的单链表-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- Linux下怎么输入重音符号
- UICollectionViewCell