创建周期性计划任务cron
目 录
一、周期性任务计划: cron
二、系统计划任务
三、用户创建计划任务
四、控制用户执行计划任务
本篇中主要从具体的实例中说明怎样创建计划任务
一、周期性任务计划: cron
(1)计划周期性执行的任务提交给crond,到指定时间会自动运行
系统cron任务:系统维护作业
(2)相关的程序包:默认已安装
使用 rpm –qi cronie 查看相关包具体信息
cronie: 主程序包,提供crond守护进程及相关辅助工具
cronie-anacron: cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务
crontabs:包含CentOS提供系统维护任务
(3)要确保crond守护处于运行状态:查看crond服务是否启动
CentOS 7:
systemctl status crond 查看是否启动
systemctl start crond 启动方法
CentOS 6:
service crond status查看是否启动
service crond start 启动方法
(4)系统cron任务:系统维护作业
/etc/crontab 将计划任务写入该文件
用户cron任务:
crontab命令 使用crontab命令创建
(5)日志监控计划任务: /var/log/cron 监控计划任务
二、系统计划任务
(1)查看任务 vim /etc/crontab
(2)例子1:工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高于80%,就执行wall警报
vim /etc/crontab
1、解释:第1位 */10 表示每10分钟执行一次(注意,*/#这里#仅限能被60 整除的数,如 */12 表示每12分执行一次)
第2位 * 小时,*代表每个小时都要执行,2代表凌晨两点执行,20代表晚上8点执行(24小时制)
第3位 *日,*代表每天执行,4 表示每月4号执行。20代表每月20号执行(1-31天)
第4位 *月,*代表每月都执行,1代表一月,2代表2月 (1-12月)
第5位 *星期几,*代表任意一天,1表示星期一,(0-7,0和都表示星期日)
第6位 root 表示执行人是root
第7位 /bin/root/checkdisk.sh 执行的操作,可以是一条命令,也可以是脚本名称,注意这里写上完整的路径。
2、注意:这里的第3位:天与第5位:星期几会产生冲突,如第3位写的20 ,第5位写的3 ,而20号这天不是星期三,那么怎样执行呢。这里采取或关系,即20号这天执行,星期三也执行,其他各个位上的关系是与关系。
3、分析:在工作日时间,即周一到周五,可以在第五位写1-5(1,2,3,4,5可以 ;1-3,4,5也可以),但是第3位天上该怎样写呢,两者是或关系,如果第三位写上*代表每一天都执行,包括周六,周日。那总不可能看看日历算一算吧,毕竟每个月都不一样。所以我把每个位上都写了*,那么上面就表示,每天每10分钟root执行一次/bin/root/neicun.sh这个脚本,那么判断星期几可以在脚本中判断,如果是周一到周五,执行任务,如果周六周日,什么也不做,不就满足要求了。
4、代码:
#!/bin/bash # ------------------------------------------ # Filename:checkdisk.sh # Revision: 1.0 # Date: 2017-9-9 # Description: check cipan 80% # ------------------------------------------ # 定义变量以数字方式显示出星期几 week=`date +%w` # 找出磁盘利用率最大的值 max=`df|egrep "^/dev/sd.*" |egrep -o"[0-9]+%"|cut -d% -f1|sort -nr|head -n1` #判断星期几的数是否小于6,即周一到周五,如果不是,退出不执行。如果是,则判断磁盘利用率最大的值是否大于80,如果大于,则广播,如果小于则退出 if [ $week-lt 6 ] ;then if [$max -gt 80 ];then wall "the diskspace willfull" else exit fi else exit fi #释放变量,是个好习惯。 unset week max
注意:(1)没有被重定向的输出会被邮寄给用户
(2)根用户root能够修改其它用户的作业
(3)运行结果的标准输出和错误以邮件通知给相关用户
执行的命令结果最好导入垃圾桶中
COMMAND &> /dev/null
(4)对于cron任务来讲, %有特殊用途;如果在命令中要使用%,则需要转义,将%放置于单引号中,则可不用转义
建议将执行的操作写入脚本中,不要直接写在/etc/crontab中
(5)命令在写入脚本或者/etc/crontab之前,建议先做测试
(6)这里写完脚本后要把脚本加上执行权限,chmod +x checkdisk.sh(脚本名)
三、用户创建计划任务
(1)用户cron:
crontab命令定义,每个用户都有专用的cron任务文件: /var/spool/cron/USERNAME
crontab命令:本身有suid 权限
crontab [-u user] [-l | -r | -e] [-i]
-l: 列出所有任务;
-e: 编辑任务;
* * * * * wall I am
-r: 移除所有任务;
-i:同-r一同使用,以交互式模式移除指定任务
-u user: 仅root可运行,指定用户管理cron任务
crontab –e –u wang
(2)例子1:普通用户guan 每分钟广播一次I am guan
切换到guan 用户下 su – guan
切换到root用户下,su – root ,进入/var/spool/cron/ ,可以看到guan用户创建的任务,当然root用户可以修改和删除普通用户的计划任务。
四、控制用户执行计划任务
控制用户执行计划任务: /etc/cron.{allow,deny}
白名单: /etc/cron.allow 默认不存在,只有该文件中的用户才能执行crontab命令
黑名单:/etc/cron.deny 默认存在,拒绝该文件中用户执行crontab命令, 而没有在cron.deny 文件中的使用者则可执行
如果两个文件都不存在,只有root 可以执行 crontab 命令
解释:先看/etc/cron.allow文件,如果有,则只看/etc/cron.allow文件,只有/etc/cron.allow中的用户才能执行,如果没有该文件,则查看/etc/cron.deny文件。除/etc/cron.deny中的用户之外的用户都可以创建cron任务,如果两个文件都不存在,则仅root可以创建cron任务。