任务计划分为两种:
第一种是一次性计划at
第二种是周期性计划crontab
一次性计划任务:在未来的某个时间执行一次性计划任务 at
rpm -ivh at-3.1.13-22.el7.x86_64.rpm 安装at包
systemctl status atd 查看是不是running状态,如果不是手动开启
centos7 开启 :systemctl start atd
centos6 开启 :service atd start
at -V 显示版本信息
[root@centos6 ~]#at 18:00 设置将来的一个时间
at> rm /data/* -rf 要执行的任务
at> <EOT> Ctrl+d 结束
job 1 at 2018-05-05 18:00 显示有一个任务计划在几点几分执行
at -l 查看任务计划
1 2018-05-05 18:00 a root
at -c 1 :查看第1个任务计划的内容
任务计划被放在at目录下的文件里面,重启不会丢失
cat /var/spool/at/a000010183f558
[root@centos6 ~]#at now + 15minutes 在未来的15分钟
at> wall class is over 发一个广播
at> <EOT> ctrl+d结束
job 2 at 2018-05-05 15:56
查看任务计划
[root@centos6 ~]#at -l
1 2018-05-05 18:00 a root
2 2018-05-05 15:56 a root
at -d 1 :删除第一个任务计划
-l 查看任务列表
-c 查看任务计划内容
-d 删除任计划
-f 读取任务文件
-m 强制发邮件
创建一个广播文件
[root@centos6 ~]#cat > f1.txt
wall hello ha ha ha
在未来的一分钟执行文件
[root@centos6 ~]#at -f f1.txt now + 1minutes
job 3 at 2018-05-05 15:50
如果计划任务带标准输出,不会在当前终端显示,但是它会以邮件的方式发给你,这样就会造成大量的垃圾邮件,把标准输出重定向到&> /dev/null ,就不会收到邮件
at -m 如果你不知道你的任务计划执有没有执行,就加一个-m强制发邮件,到你的邮箱
白名单和黑名单:可以规定哪个用户可以执行计划,哪个用户不可以执行任务计划
白名单 :/etc/at.allow 默认不存在,要创建,将用户加入白名单
黑名单 :/etc/at.deny 默认存在 将用户写入文件,用户就不能执行任务计划
规则 :如果有白名单,只有白名单里面的用户能执行任务计划,其他用户不能执行
如果没有白名单,只有黑名单那只有黑名单里面的用户不能执行任务计划,其他用户都可以
用脚本创建计划任务
#!/bin/bash
at 18:00 <<end
rm /data/* -rf
end
周期性计划任务 cron
rpm -ivh /mnt/cdrom/Packages/cronie-1.4.11-17.el7.x86_64.rpm
centos7 :启动服务 systemctl start crond
开机启动 systemctl enable crond
centos6 :启动服务 service crond start
rpm -ivh /misc/cd/Packages/cronie-anacron-1.4.4-16.el6_8.2.x86_64.rpm
补充工具,用于监控cronie任务执行情况,如果任务计划在该执行的时间点没有执行,则anacron会随后启动一次任务计划
cat /etc/anacrontab
rpm -ivh /misc/cd/Packages/crontabs-1.10-33.el6.noarch.rpm
包括了和系统相关的辅助性计划任务
/etc/crontab :属于系统的关于任务计划的配置文件,这个文件定义了计划任务相关信息
[root@centos7 ~]#cat /etc/crontab
SHELL=/bin/bash :用的shell类型
PATH=/sbin:/bin:/usr/sbin:/usr/bin :计划任务有一些可执行程序,这些程序在哪个路径下搜索
MAILTO=root :如果计划发出信息,给相应的人发邮件
# For details see man 4 crontabs
# Example of job definition:
# .—————- minute (0 – 59) 几分钟
# | .————- hour (0 – 23) 几小时小时
# | | .———- day of month (1 – 31) 几天
# | | | .——- month (1 – 12) OR jan,feb,mar,apr … 一年12个月
# | | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 星期几,也可以 1-5显示星期一到星期五
# | | | | |
# * * * * * user-name command to be executed
* * * * *代表每分钟,每小时,每天,每月,每星期
例:
52 16 * * * root wall hello
16点52分 每天 每月 每星期 root用户 执行广播
例:
1 17 * * * root tar zcvf /data/etc.tar.gz /etc/ &> /dev/null
5点01分 每天 每月 每星期 root用户执行/etc/下的文件压缩到data目录下 ,并重定向到垃圾黑洞
标准输出重定向到/dev/null ,不然会发送垃圾邮件
例:
16 17 1,10,20 * * root
1号,10号,20号,每月每星期17点16分 root用户执行某程序
例:
16 17 1,10,20 * 0,6 root tar Jcvf /data/etc.tar.xz /etc/ &> /dev/null
1号,10号,20号或星期日和星期六17点16分 root用户执行程序
例:
#!/bin/bash
ti=`date +%u` 设置一个ti的变量
[ $ti -eq 6 -o $ti -eq 0 ] && wall hello 如果数字等于6会在0 会发送一个hello的广播
chmod +x f2.sh
vim /etc/crontab
40 17 * * * root /root/f2.sh
星期六和星期日17点40执行f2.sh脚本,发送广播
例:
#!/bin/bash
ti=`date +%u`
[ $ti -eq 6 -o $ti -eq 0 ] && wall hello
vim /etc/crontab
40 17 1,10,20 * * root /root/f2.sh
每月的1号10号20号并且星期日和星期六17:40执行程序
例:
vim /etc/crontab
* * * * * root f2.sh
root用户每分钟执行一次脚本
例:
vim /etc/crontab
1 * * * * root f2.sh
root用户每小时的第一分钟执行一次脚本
例:执行命令的间隔为秒
vim f3.sh
md0执行 命令
leep 20 休眠20秒
md20 执行命令
leep 20 休眠20秒
md30执行 命令
vim /etc/crontab
* * * * * root f3.sh
每20秒执行一次命令
usleep可以精确到微秒 1000000微秒等于一秒
@monthly root /root/f2.sh
每月1号执行一次文件
@reboot root /root/f2.sh
当重启的时候执行某个操作
@hourly 一小时执行一次
@daily 一天执行一次
@weekly 一周执行一次
@monthly 一月执行一次
@annually 一年执行一次
cat /var/log/cron 日志记录了当前发生的事件
每个单用户创建任务计划用 crontab
crontab -e 要创建计划任务
* * * * * wall hello 每分钟广播一次 不需要写用户名
cat /var/spool/cron 计划任务放在这个文件,在root用户下可以查看和修改
在root用户编辑普通用户的计划任务
crontab -l -u wang 查看wang用户的计划任务
crontab -e -u wang 编辑wang用户的计划任务
crontab -r -u wang 删除wang用户的计划任务
单用户的白名单和黑名单
白名单 :/etc/cron.allow 默认不存在,要创建,将用户加入白名单
黑名单 :/etc/cron.deny 默认存在 将用户写入文件,用户就不能执行任务计划
在cron里面的%号有特殊含义,不能直接使用,写在脚本里面直接调用
练习题
1、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式
为“etcbak-yyyy-mm-dd-HH.tar.xz” ,其中日期是前一天的时间
vim time.sh
#!/bin/bash
date -d “-1 day” +%F-%H
chmod +x time.sh
vim /etc/crontab
05 21 * * * root tar Jcvf /data/etcbak-`. time.sh`.tar.xz /etc/
2、每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至
/tmp/meminfo.txt文件中
* */2 * * * cat /proc/meminfo |egrep “^(S|M)” >> /tmp/meminfo.txt
3、工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高
于80%,就执行wall警报
vim disk.sh
#!/bin/bash
disk1=`df |grep “sd” |sed -r “s/.*[ ]+([0-9]{1,3}).*/\1/” |sort -nr |head -n1`
disk2=`df -i |grep “sd” |sed -r “s/.*[ ]+([0-9]{1,3}).*/\1/” |sort -nr |head -n1`
[ $disk1 -ge 80 -o $disk2 -ge 80 ] && wall Disk over 80%
vim /etc/crontab
*/10 * * * 1-5 root disk.sh
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97598