Linux任务计划详解(crontab、at)

一、循环执行的例行性工作调度

  • 大部分系统管理工作都是通过定期自动执行某一个脚本来完成的,那么如何定期执行某一个脚本呢?这就要借助linux的cron功能了。Cron的格式是这样的,每一行代表一个任务计划,总共分成两部分,前面部分为时间,后面部分要执行的命令。前面的时间是有讲究的,这个时间共分为5段,用空格隔开(可以是多个空格),第一段表示分钟(0-59),第二段表示小时(0-23),第三段表示日(1-31),第四段表示月(1-12),第五段表示周(0-7,0或者7都可以表示为周日)。从左至右依次是:分,时,日,月,周(一定要牢记)!

  • 例如:每天凌晨1点20分清除/var/log/slow.log这个文件这样的任务。
    20 1 * * * echo “”>/var/log/slow.log

  • crontab -e 打开了/var/spool/cron/username (如果是root则打开的是/var/spool/cron/root)这个文件。使用的是vim编辑器,插入“20 1 * * * echo “” > /var/log/slow.log”,在命令模式下输入:wq保存即可。但是,你千万不要直接用vi命令去编辑那个文件,因为可能会出错,所以一定要使用crontab -e来编辑。

任务计划命令说明
yum install -y vixie-cron安装crond。
service crond start启动crond服务。
service crond status查看crond服务状态。
vi /etc/crontab制定或修改系统的例行性计划任务。
crontab -e制定或修改当前登录用户的cron计划任务。
crontab -l列出计划任务。
crontab -r删除全部计划任务。
特殊符号说明
*代表任何时刻。例:0 12 * * * command,表示每天12点执行一次后续命令。
代表分隔时段。例:0 3,6 * * * command,表示每天3点和6点各执行一次后续命令。
-代表一段时间范围内。例:20 3-6 * * * command,表示每天3点到6点的每个小时的20分都执行一次后续命令。
/nn代表数字,即每隔n单位间隔的意思。例:*/5 * * * * command或0-59/5 * * * * command,表示每5分钟执行一次后续命令。
实例说明
01 * * * * root mail xue < /root/test.txt每小时给xue发送一封邮件。
*/5 * * * * root run-parts /root/runcron每隔5分钟执行一次/root/runcron目录下的所有可执行文件。

二、实际运行单次工作调度

命令说明
at now + 3 minutes3分钟后执行此任务。
at -lat -l相当于atq,列出目前系统上面的所有该用户的at调度。
atq列出目前系统上面的所有该用户的at调度。
at -d 4at -rd相当于atrm,删除在at调度中的作业编号标识为 4的工作。
atrm 4取消在at调度中的第4项工作。
at -V显示at版本号。
at -c 4列出第4项工作的实际内容。
TIME时间格式,可以定义进行at这项工作的时间。格式有:HH:MM ex>04:00在今日的HH:MM时刻进行,若已超过该时刻,则明天的HH:MM进行此工作;HH:MM YYYY-MM-DD ex>04:10 2019-03-17 强制规定在在某年某月某日的特定时刻进行该工作;HH:MM [am|pm] [Month] [Date] ex>04:00 2019-03-17 强制规定在在某年某月某日的特定时刻进行该工作;HH:MM [am|pm] + number[minutes|hours|days|weeks] ex>04:10pm + 3 days(3天后上午4:10) ex>now + 5 minutes(5分钟后) 在某个时间点“再加多少时间后”进行该工作。

例:3分钟后在本机屏幕显示"hello world"。
在这里插入图片描述
例:3分钟后在远程连接主机屏幕显示"qqqq"。
在这里插入图片描述

例:CPU工作负载小于0.8时,才进行你所执行的工作任务。若负载太高,则暂缓执行。

在这里插入图片描述

三、anacron开机后立刻检测停机期间应该运行但是并没有运行的crontab任务,并将该任务执行一遍,然后anacron就会自动停止

anacron命令功能
anacron -f job强制执行相关工作,忽略时间戳。job代表由/etc/anacrontab定义的各项工作的名称。
anacron -u job更新 /var/spool/anacron/cron.{daily,weekly,monthly} 文件中的时间戳为当前日期,但不执行任何工作。
anacron -s job依据 /etc/anacrontab 文件中设定的延迟时间顺序执行工作,在前一个工作未完成前,不会开始下一个工作。
anacron -n job立即执行 /etc/anacrontab 中所有的工作,忽略所有的延迟时间。

在这里插入图片描述

  • 用 cron.daily 工作来说明一下 /etc/anacrontab 的执行过程。
    1、由/etc/anacrontab分析cron.daily这项工作的天数为一天;
    2、读取 /var/spool/anacron/cron.daily 文件中 anacron 上一次执行的时间戳;
    3、和当前时间比较,如果两个时间的差值超过 1 天,就执行 cron.daily 这项工作;
    4、执行工作时强制延迟时间为 5 分钟;
    5、延迟时间过后,开始执行“run-parts /etc/cron.daily”目录中所有的可执行文件;
    6、执行完毕后,anacron程序结束。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值