Linux任务计划
Posted yongbuyanbai0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux任务计划相关的知识,希望对你有一定的参考价值。
任务计划
1 Linux任务计划、周期性任务执行 2 未来的某时间点执行一次任务 3 at 指定时间点,执行一次性任务 4 batch 系统自行选择空闲时间去执行此处指定的任务 (不常用) 5 周期性运行某任务 6 cron
任务计划创建之at
1 at任务 2 包:at 3 at命令:at [option] TIME 4 常用选项: 5 -V 显示版本信息 6 -t time 时间格式 [[CC]YY]MMDDhhmm[.ss] 7 -l 列出指定队列中等待运行的作业;相当于atq 8 -d 删除指定的作业;相当于atrm 9 -c 查看具体作业任务 10 -f /path/file 指定的文件中读取任务 11 -m 当任务被完成之后,将给用户发送邮件,即使没有标准输出 12 -m是即使没有标准输出,计划任务执行完了也会发送邮件 13 注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户 14 TIME:定义出什么时候进行 at 这项任务的时间 15 HH:MM [YYYY-mm-dd] 16 noon(中午), midnight(午夜), teatime(4pm)(下午茶) 17 tomorrow 18 now+#minutes,hours,days, OR weeks 19 +10minutes:十分钟后执行 20 例:创建一次性任务,以邮件方式查看 21 [root@centos6 ~]#at 11:35 22 at> date 23 at> ls /root 24 at> echo 123123 25 at> <EOT> 输入命令后Ctrl+d键退出 26 job 2 at 2019-09-09 11:35 27 [root@centos6 ~]#at -l 28 2 2019-09-09 11:35 a root 29 也支持输入重定向方式 30 at 12:00 << EOF 31 echo 123 32 echo 354 33 EOF 34 at时间格式 35 HH:MM 02:00 36 在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务 37 HH:MM YYYY-MM-DD 02:00 2016-09-20 38 规定在某年某月的某一天的特殊时刻进行该项任务 39 HH:MM[am|pm] [Month] [Date] 40 04pm March 17 41 17:20 tomorrow 42 HH:MM[am|pm] + number [minutes|hours|days|weeks] 43 在某个时间点再加几个时间后才进行该项任务 44 now + 5 min 45 02pm + 3 days 46 at任务 47 执行方式: 48 1)交互式 2)输入重定向 3)at –f 文件 49 依赖与atd服务,需要启动才能实现at任务 50 at队列存放在/var/spool/at目录中 51 /etc/at.allow,deny控制用户是否能执行at任务 52 白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令 53 黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在 54 添加黑名单之后该用户将不能创建计划任务,按时该用户之前创建的计划任务 55 是可以执行的 56 这两个文件的优先级顺序是这样的,当一个用户区创建计划任务先看有没有 57 /etc/at.allow ,如果有看文件中有没有这个用户如果有就可以执行,如果没有 58 就会拒绝。如果/etc/at.allow文件不存在就会看/etc/at.deny文件如果有就会 59 被拒绝,如果没有将默认允许 60 at.deny 文件中的使用者则可执行 61 如果两个文件都不存在,只有 root 可以执行 at 命令
任务计划创建之cron
1 周期性任务计划cron 2 周期性任务计划:cron 3 相关的程序包: 4 cronie:主程序包,提供crond守护进程及相关辅助工具 5 在主程序包中包含一个服务/usr/lib/systemd/system/crond.service 6 这个服务必须处于启用的状态计划任务才能进行执行 7 cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如 8 cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次 9 此任务 10 crontabs:包含CentOS提供系统维护任务 11 计划任务 12 确保crond守护处于运行状态: 13 CentOS 7: 14 systemctl status crond 15 CentOS 6: 16 service crond status 17 计划周期性执行的任务提交给crond,到指定时间会自动运行 18 系统cron任务:系统维护作业 19 /etc/crontab 20 用户cron任务: 21 crontab命令 22 日志:/var/log/cron 23 计划任务 24 系统cron任务:/etc/crontab 25 注释行以 # 开头 26 详情参见 man 5 crontab 27 # Example of job definition: 28 # .---------------- minute (0 - 59) 29 # | .------------- hour (0 - 23) 30 # | | .---------- day of month (1 - 31) 31 # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... 32 # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 33 # | | | | | 34 # * * * * * user-name command to be executed 35 例如:晚上9点10分运行echo命令 36 10 21 * * * wang /bin/echo "Howdy!" 37 */10 * * * * root /data/bin/checkdisk.sh :每隔十分中就检查一次磁盘;*号表示每的意思, 38 */10表示每10分钟,其他的都是每小时,每天,每月 39 30 2 1,10,20 * 0 root /data/check_disk.sh :如果天和周都有定义,就是或的关系,这个例子是1, 40 10,20号和周日的2点30分执行命令,如果想要1,10,20, 41 并且是周日在执行,那就在脚本里写一个判断语句, 42 date +%w判断是周几,返回的是数字 43 30 2 * 3-6,12 * root /bin/cat /var/log/messages :3到6月和12月的每天2点30分以root用户 44 身份执行命令 45 任务计划中的命令必须是命令的绝对路径,一般情况都是编辑好脚本,这里写脚本的绝对路径运行脚本的 46 计划任务 47 时间表示法: 48 (1) 特定值 49 给定时间点有效取值范围内的值 50 (2) * 51 给定时间点上有效取值范围内的所有值 52 表示“每...” 53 (3) 离散取值 54 #,#,# 55 (4) 连续取值 56 #-# 57 (5) 在指定时间范围上,定义步长 58 /#: #即为步长 59 时间格式 60 @reboot Run once after reboot :下次重启执行 61 @yearly 0 0 1 1 * :每天 62 @annually 0 0 1 1 * 63 @monthly 0 0 1 * * :每月 64 @weekly 0 0 * * 0 65 @daily 0 0 * * * 66 @hourly 0 * * * * 67 示例:每3小时echo和wall命令 68 0 */3 * * * centos /bin/echo “howdy”; wall “welcome to Magedu!” 69 计划任务 70 系统的计划任务: 71 /etc/crontab 配置文件 72 /etc/cron.d/ 配置文件 73 /etc/cron.hourly/ 脚本 74 /etc/cron.daily/ 脚本 75 /etc/cron.weekly/ 脚本 76 /etc/cron.monthly/ 脚本 77 用户计划任务 78 crontab命令定义 79 每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME 80 crontab命令: 81 crontab [-u user] [-l | -r | -e] [-i] 82 -l 列出所有任务 83 -e 编辑任务 84 -r 移除所有任务 85 -i 同-r一同使用,以交互式模式移除指定任务 86 -u user 仅root可运行,指定用户管理cron任务 :指定是那个用户的计划任务 87 控制用户执行计划任务: 88 /etc/cron.allow,deny 89 at和crontab 90 一次性作业使用 at 91 重复性作业使用crontab 92 Create at time crontab -e 93 List at -l crontab -l 94 Details at -c jobnum crontab -l 95 Remove at -d jobnum crontab -r 96 Edit N/A crontab -e 97 没有被重定向的输出会被邮寄给用户 98 root能够修改其它用户的作业 99
计划任务的实例
1 在 12:01 a.m 运行,即每天凌晨过一分钟。这是一个恰当的进行备份的时间,因为此时系统负载不大。 2 1 0 * * * /root/bin/backup.sh 3 每个工作日(Mon – Fri) 11:59 p.m 都进行备份作业。 4 59 11 * * 1,2,3,4,5 /root/bin/backup.sh 5 下面例子与上面的例子效果一样: 6 59 11 * * 1-5 /root/bin/backup.sh 7 每5分钟运行一次命令 8 */5 * * * * /root/bin/check-status.sh 9 每个月的第一天 1:10 p.m 运行 10 10 13 1 * * /root/bin/full-backup.sh 11 每个工作日 11 p.m 运行。 12 0 23 * * 1-5 /root/bin/incremental-backup.sh 13 30 21 * * * /usr/local/etc/rc.d/lighttpd restart 14 上面的例子表示每晚的21:30重启apache。 15 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart 16 上面的例子表示每月1、10、22日的4 : 45重启apache。 17 10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart 18 上面的例子表示每周六、周日的1 : 10重启apache。 19 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart 20 上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。 21 0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart 22 上面的例子表示每星期六的11 : 00 pm重启apache。 23 * */1 * * * /usr/local/etc/rc.d/lighttpd restart 24 每一小时重启apache 25 * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart 26 晚上11点到早上7点之间,每隔一小时重启apache 27 0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart 28 每月的4号与每周一到周三的11点重启apache 29 0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart 30 #每天早上7点执行一次 /bin/ls : 31 0 7 * * * /bin/ls 32 在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup 33 0 6-12/3 * 12 * /usr/bin/backup
以上是关于Linux任务计划的主要内容,如果未能解决你的问题,请参考以下文章