计划任务
Posted skyzy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计划任务相关的知识,希望对你有一定的参考价值。
计划任务: 让系统在将来的指定时间点执行某些任务(程序);任务可以周期性执行也可以仅仅执行一次。 Linux系统中的计划任务:at 和 cron服务是操作系统内置的2个服务,默认情况是安装好的。 at服务:指定某个时间一次性执行某个任务,依赖于系统后台atd进程 cron服务:指定时间周期性执行某个任务,依赖于系统后台crond进程 at任务计划: 1、确认at这个服务是否已经安装: # rpm -q at 2、相关的文件: /etc/rc.d/init.d/atd :at服务的启动脚本 /etc/pam.d/atd : 验证机制 /var/spool/at/xxx :计划任务的文本文件保存目录 /usr/bin/at :命令 /usr/bin/atq :查看at的任务列表 /usr/bin/atrm :删除任务 /etc/at.deny :用户控制列表,拒绝用户列表 /etc/at.allow :(默认没有,允许列表);默认是允许所有用户使用at服务 3、常用的命令: at:制定一个一次性计划任务 -l 列出at任务 等于atq -d 删除at任务 等于atrm -c 查看任务内容 batch:以一个低优先级延时执行任务 4、查看服务状态: # /etc/rc.d/init.d/atd status ----查看atd服务的状态 # /etc/rc.d/init.d/atd start ----启动atd服务 # chkconfig atd --list # chkconfig atd on ----设置开机时启动at服务 # service atd start ------保证处于运行状态 5、命令格式: at 15:30 at 10:10 today at now+2min -----------2分钟后执行 at 4pm + 3 days -------3天以后的下午4点运行此job at 1am tomorrow ------明天上午1点运行此job at 4:00 2020-12-12 -----在2020-12-12日的凌晨4点执行 at -t 09201430 ---------9月20日的下午2:30运行此job at -t 202009201430 -----2020年的9月20日的下午2:30运行此job at now + 5 minutes 任务在5分钟后运行 at now + 1 hour 任务在1小时后运行 at now + 3 days 任务在3天后运行 at now + 2 weeks 任务在两周后运行 crtl + d --结束 实例:比较复杂的任务可以保存到脚本: vim /root/useradd.sh #!/bin/bash for i in {1..3}; do useradd user$i done echo "user is ok">>/tmp/user.log # chmod 755 /root/useradd.sh 调用脚本执行 #at -f /root/useradd.sh now +1min #at -f /root/useradd.sh -t 07271515 at服务访问控制: /etc/at.allow 作用:只允许文件里面出现的用户使用atd这个服务,如果这个文件存在,就不去考虑at.deny. /etc/at.deny 作用:只拒绝里面的用户使用atd。如果at.allow不存在的时候,才生效 crontab:周期性计划任务 当需要周期性地重复执行任务时可以使用cron服务;该服务每分钟检查一次,并执行符合条件的任务。 1、查看服务是否启动 # service crond status # /etc/init.d/crond status 2、查看相关文件列表 /etc/pam.d/crond /etc/rc.d/init.d/crond 启动脚本 /usr/bin/crontab 用户级别的命令 /usr/sbin/crond 二进制的命令 /etc/cron.d/ 里面通常存放用来设定除了每天/每周/每月之外的定时任务,比如说每小时周期执行的任务和其他任何定时任务。 /etc/cron.d/0hourly 系统每小时第一分钟需要执行的任务 /etc/cron.deny 用户拒绝列表(在该文件中的用户不能使用cron服务) /etc/crontab 该文件的作用相当于/etc/cron.d/下面的某一个文件,可以定义系统计划任务。 /var/spool/cron 这个目录用来存放各个用户自己设定的定时任务,普通用户没有权限直接访问,必须通过crontab 命令(setuid) /etc/cron.monthly/ 存放系统每个月需要执行的脚本 /etc/cron.weekly/ 存放系统每周需要执行的脚本 /etc/cron.daily/ 存放系统每天需要执行的脚本 /etc/cron.hourly/ 存放系统每小时需要执行的脚本 3、 crontab 格式说明 # cat /etc/crontab 这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab。 SHELL=/bin/bash 默认的shell,告诉系统使用哪个shell PATH=/sbin:/bin:/usr/sbin:/usr/bin 定义命令的路径 MAILTO=root 命令的执行结果以邮件的形式发送给root(不管是标准正确还是错误结果),如果MAILTO=“” ,代表不会发邮件给任何人。 HOME=/ 定义在执行命令或脚本时的主目录 # * * * * * user-name command to be executed 前5个字段分别表示: 分钟:0-59 小时:0-23 日期:1-31 月份:1-12 星期:0-7(0表示周日或者7表示周日) 还可以用一些特殊符号: ,: 表示分割,间隔。如第二个*表示成 8,10,就表示8点和10点 -:表示一个段,如第二个*表示成 1-5,就表示1到5点 /n : 表示每个n的单位执行一次,如第二个*表示成*/1, 就表示每隔1个小时执行一次命令。 eg:42 041** root run-parts /etc/cron.monthly/ 注意:run-parts: cron用这个工具来执行某个目录下所有的可执行脚本,定时任务中的每小时/每天/每周/每月任务就是通过这个工具来触发的。 制定系统计划任务 方法一:自己编写计划任务文件 方法二:将自己的计划任务放到相应的系统任务目录里 系统自己的计划任务:/etc/cron.{daily,weekly,monthly} 如果系统断电或者宕机,错过任务执行的时间,怎么办? anacron 任务: 是cron服务的扩展,配合cron服务一起使用,当系统断电或者宕机,错过任务执行的时间时,系统启动后它会再次执行未执行的任务。 配置文件:/etc/anacrontab 说明:对于每个计划任务,anacrontab先判断在period(执行频率)期间内是否被执行了,如果没执行则等待delay(延迟时间),再次执行该任务。 总结: 1、如果你有很多任务需要每天|周|月重复执行,并且希望系统能自动把漏掉的任务补回来。那么你可以将你的脚本存放到系统相应的目录下面/etc/cron.{daily,weekly,monthly},并赋予可执行权限。 2、以上需要系统定时去调用的任务就叫系统级别的定时任务。 设定用户级别的定时任务 相关命令: 普通用户编辑自己的定时任务 crontab -e <--- 编辑当前用户自己的定时任务(使用环境变量EDITOR指定的默认编辑器) crontab -l <--- 列出当前用户自己所有的定时任务 crontab -r <--- 删除当前用户自己所有的定时任务 作为管理员,root可以设定/调整所有用户的定时任务,命令和上面类似,只是增加了一个-u以上是关于计划任务的主要内容,如果未能解决你的问题,请参考以下文章