Linux任务计划

一、Linux任务计划、周期性任务执行

at:未来的某时间点执行一次任务;
batch:系统自行选择空闲时间去执行此处指定的任务;
cron:周期性运行某任务;
windows(任务计划):打开附件——系统工具文件夹——任务计划程序;

二、at任务

rpm -ql at
centos7:/etc/sysconfig/atd  /usr/lib/systemd/system/atd.service——systemctl
centos6:/etc/sysconfig/atd  /etc/rc.d/init.d/atd——service

1.at命令

《Linux任务计划》 Paste_Image.png

(1)at TIME
TIME:定义出什么时候进行at这项任务的时间;
noon,midnight,teatime(4pm),tomorrow
now + # {minutes,hours,days,weeks}

at 16:38  默认当天
at 16:38 2017-07-01  指定年月日
at now + 5 minutes  在某个时间点再加几个时间后才进行该项任务
 
ctrl+d  结束输入,自动出现<EOF>;
mail  查看邮件
注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户;
写计划任务时,脚本里不要写标准输出,非写不可,可以重定向到/dev/null里,否则造成垃圾邮件过多;
(2)常用选项
-V:显示版本信息;
-l:列出指定队列中等待运行的作业(包含任务号);相当于atq;
-d 任务号:删除指定任务号的作业;相当于atrm;  
-c 任务号:查看具体作业任务;会出现乱码;
-f /path/from/somefile:从指定的文件中读取任务;
-m:当任务被完成之后,将给用户发送邮件,即使没有标准输出;

at -m 12:00  发送邮件提醒用户,任务已完成;
或者
echo at is finish  此命令是标准输出,放最后一行;邮件显示出来,即表示任务完成;

2.at任务

执行方式
(1)交互式  
(2)输入重定向  例如:cat file1 | at 19:00
(3)at –f 文件  例如:at -f file1 now + 1 minute
sed -f
setfacl -f
依赖与atd服务,需要启动才能实现at任务
centos7:systemctl start atd.service
centos6:service start atd
at队列(待执行的任务文件)存放在/var/spool/at目录中;
任务执行完毕后,自动删除这些文件;
断电之后,预定任务还未执行;若此任务的未来时间已经过去,则明天此时执行任务;
/etc/at.{allow,deny}控制用户是否能执行at任务
白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令;
黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny文件中的使用者则可执行;
白名单存在,黑名单失效;即:白名单优先级高于黑名单;
如果两个文件都不存在,只有root可以执行at命令;

普通用户创建了一个任务,后被加入黑名单,此任务可以继续执行;
只要/var/spool/at目录中有该任务,则此任务就会执行;
rm -f /var/spool/at/a*  删除全部任务计划
at任务不会生成日志文件;

三、周期性任务计划cron

rpm -ql cronie
centos7:/etc/sysconfig/crond  /usr/lib/systemd/system/crond.service
centos6:/etc/sysconfig/crond  /etc/rc.d/init.d/crond

确保crond守护处于运行状态
CentOS 7:systemctl status crond
CentOS 6:service crond status

1.相关的程序包

(1)cronie
主程序包,提供crond守护进程及相关辅助工具;
(2)cronie-anacron
rpm -ql cronie-anacron
cronie的补充程序,用于监控cronie任务执行状况;
例如:cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务;
(3)crontabs:包含CentOS提供系统维护任务;
rpm -ql crontabs

2.两个任务

计划周期性执行的任务提交给crond,到指定时间会自动运行下面两个任务:
(1)系统cron任务:系统维护作业——vim /etc/crontab
(2)用户cron任务:crontab命令
(3)日志:/var/log/cron

《Linux任务计划》 Paste_Image.png

3.系统cron任务

时间表示法
*——每
*/5——每5分钟/小时/天/月/周/ 
15,28(day位置)——15号和28号,这两天;
15-28(day位置)——15号到28号,中间的天数也包括;
man 5 cron  查看cron帮助
几号和星期几冲突时,取它们的并集(或关系);即:几号——执行任务;星期几——也执行任务;
必须是几号或者周几,需要加条件判断(且关系);即:只有几号——执行任务;只有星期几——执行任务;
时间格式
@reboot    Run once after reboot.
@yearly    0 0 1 1 *    (1月1号)
@annually  0 0 1 1 *    (1月1号)
@monthly   0 0 1 * *    (每月1号)
@weekly    0 0 * * 0    (每周日)
@daily     0 0 * * *    (每天)
@hourly    0 * * * *    (每小时)
vim /etc/crontab

《Linux任务计划》 Paste_Image.png

解决reboot循环方法
(1)重启界面:按e
(2)linux16(网卡回归传统)行最后:添加rd.break——按下"ctrl + x"
(3)cd /sysroot;ls  不是原来的根了,所以要切换
(4)mount -o remount,rw /sysroot  所要编辑的文件是只读,更改成读写
(5)vi /sysroot/etc/crontab  vim用不了,用vi来编辑
exit

《Linux任务计划》 Paste_Image.png

cat /etc/cron.d/0hourly  

《Linux任务计划》 Paste_Image.png

cat /etc/cron.hourly/0anacron

《Linux任务计划》 Paste_Image.png

cat /etc/anacrontab(参考下面的anacron系统)

《Linux任务计划》 Paste_Image.png

每天执行
cat /etc/cron.daily/logrotate
文件太大,会另存为一个新的文件,保证当前使用的文件的读写性能;
每天都检查;例如:把日志分割成小文件——日志的轮转;
cat /etc/cron.daily/man-db.cron  生成update数据库文件

《Linux任务计划》 Paste_Image.png

/etc/cron.weekly/脚本  
/etc/cron.monthly/脚本  
都是空文件,把自己希望每周和每月执行的任务,编辑成脚本,放在这些目录下即可;
anacron系统(*)
(1)运行计算机关机时cron不运行的任务,CentOS6以后版本取消anacron服务,由crond服务管理;
(2)对笔记本电脑、台式机、工作站、偶尔要关机的服务器及其它不一直开机的系统很重要;
(3)配置文件:/etc/anacrontab
负责执行/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly中的系统任务;
•如果在这些日子里没有运行这些任务……
•在重新引导后等待这么多分钟后运行它
•任务识别器,在日志文件中标识
•要执行的任务
由/etc/cron.hourly/0anacron执行
当执行任务时,更新/var/spool/anacron/cron.daily 文件的时间戳
管理临时文件
(1)CentOS6——脚本形式
使用/etc/cron.daily/tmpwatch定时清除临时文件;
cat /etc/cron.daily/tmpwatch  清除超过10天/30天的文件;
windows里,并没有此服务,即使清除,也不会清除的很彻底;
(2)CentOS7——服务形式
systemctl status systemd-tmpfiles-setup.service  使用systemd-tmpfiles-setup服务实现
(3)配置文件(centos7)*
/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles/*.conf
(4)/usr/lib/tmpfiles.d/tmp.conf(centos7)
d /tmp 1777 root root 10d
d /var/tmp 1777 root root 30d
命令:systemd-tmpfil–clean|remove|create configfile

《Linux任务计划》 Paste_Image.png

四、用户cron

crontab 命令定义,每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME;

1.crontab命令

crontab [-u user] [-l|-r|-e] [-i]
-l:列出所有任务;
-e:编辑任务;
-r:移除所有任务;
-i:同-r一同使用,以交互式模式移除指定任务
-u user:仅root可运行,指定用户管理cron任务

例如
crontab -e  编辑自己的任务计划
crontab -e -u fgq  编辑fgq用户的任务计划
crontab -r  删除自己的任务计划
crontab -r -u fgq  删除fgq用户的任务计划
crontab -i -r -u fgq  问你是否删除fgq用户的任务计划

tail /var/log/cron  查看计划任务
cat /var/log/cron  
which crontab
/usr/bin/crontab 文件是SUID权限,继承所有者的权限;
crontab -e = vi  vi默认:编辑内容无颜色;
export EDITOR=vim  把编辑器转换为vim,编辑内容就可以有颜色;
vim /etc/profile.d/env.sh  设置对所人有效,添加上面的命令即可;
. /etc/profile.d/env.sh  使文件生效

《Linux任务计划》 Paste_Image.png

《Linux任务计划》 Paste_Image.png

脚本:分区利用率大于80%——报警
(1)crontab -e
* * * * * /root/diskcheck.sh
(2)vim diskcheck.sh
#!/bin/bash
disk=`df|grep '^/dev/sd'|tr -s ' ' %|cut -d % -f 5|sort -nr|head -1`
或者
disk=`df|sed -nr '/^\/dev\/sd/s/^.*[[:space:]]+(.*)%.*$/\1/p'`
[ "$disk" -gt 80 ] && wall disk will be full 
(3)chmod +x diskcheck.sh
(4)crontab -l
(5)tail /var/log/cron

《Linux任务计划》 Paste_Image.png

2.控制用户执行计划任务

/etc/cron.allow  白名单
/etc/cron.deny  黑名单

3.at和crontab

一次性作业使用at;
重复性作业使用crontab;
没有被重定向的输出会被邮寄给用户;
根用户能够修改其它用户的作业;
Createat timecrontab -e
Listat -lcrontab -l
Detailsat -c jobnum
Removeat -d jobnumcrontab -r
Editcrontab -e
注意:运行结果的标准输出和错误以邮件通知给相关用户
(1) COMMAND > /dev/null
(2) COMMAND &> /dev/null
对于cron任务来讲,%有特殊用途;
如果在命令中要使用%,则需要转义,将%放置于单引号中,则可不用转义;
脚本:每天生成日志文件,备份/etc目录
crontab -e  编辑内容 
* 2 * * * cp -r /etc/ /app/backup-`date +%F` &> /dev/null
cat /var/spool/cron/root  查看此任务
cat /var/log/cron  查看日志
执行任务失败——语法错误——%的原因
解决方法:把标准输出写成脚本
(1)crontab -e  编辑内容 
* 2 * * * /root/backup.sh
(2)vim backup.sh
#!/bin/bash
cp -r /etc/ /app/backup-`date +%F`
(3)chmod +x backup.sh
(4)tail -f /var/log/cron
复杂任务,写成脚本,放在目录位置,即可执行;

4.思考

(1)如何在秒级别运行任务?(for循环)
* * * * * for min in 0 1 2; do echo "hi"; sleep 20; done
编写脚本:f1.sh(脚本里包含cmd1;sleep20)
判断今天是星期几:date +u%
(2)如何实现每7分钟运行一次任务?(for循环)
(3)sleep(休眠)
sleep 1/0.5  默认秒  
sleep 1m  1分
sleep 1h  1小时
sleep 1d  1天
usleep 1000000  1s
usleep 1000  1ms
usleep 1  1微妙(军事)
    原文作者:Miracle001
    原文地址: https://www.jianshu.com/p/f2b053498cf6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞