一次性计划任务

以备份yum仓库文件的计划任务为例,先检查脚本:

  1. [@]# cat /root/backup-yum-repo.sh
  2. /*#!/bin/bash
  3. mkdir /opt/yum-repo-backup-dir -p
  4. cp -r /etc/yum.repos.d /opt/yum-repo-backup-dir/yum.repos.d-`date "+%Y-%m-%d- %H:%M:%S"`.bak
  5. # 使用at命令来执行一次性备份yum仓库文件,为了顺利的查看at的执行结果,使用下面命令来关闭ntp同步,并设置 你的时间。
  6. # timedatectl set-ntp 0命令关闭了ntp同步
  7. timedatectl set-ntp 0
  8. #date -s "2021-12-4 18:30:50"命令设置日期和时间
  9. date -s "2021-12-4 18:30:50"
  10. #下午的5点执行,也就是17:00执行,如果此时时间已经过了当天下午,那么顺延到第二天
  11. at 5:00PM
  12. at> /root/backup-yum-repo.sh
  13. at> <EOT>
  14. #提交at的计划任务使用ctrl+d
  15. #6点22分执行,如果此时时间已经过了当天的6:22分,那么顺延到第二天
  16. at 6:22
  17. at> /root/backup-yum-repo.sh
  18. at> <EOT>
  19. # 2021年的3月15号的此刻执行,如果没有指定time,那么就是定制计划任务的time作为执行天的time
  20. at 2021-03-15
  21. at> /root/backup-yum-repo.sh
  22. at> <EOT>
  23. #2021年3月15号的12点12分执行
  24. at 12:12 2021-03-15
  25. at> /root/backup-yum-repo.sh
  26. at> <EOT>
  27. # 5天之后的9点15分执行
  28. at 9:15 + 5 days
  29. at> /root/backup-yum-repo.sh
  30. at> <EOT>
  31. # 在中午12点执行,如果过了12点,时间顺延到第二天
  32. at noon
  33. at> /root/backup-yum-repo.sh
  34. at> <EOT>
  35. # 在周一执行
  36. at monday
  37. at> /root/backup-yum-repo.sh
  38. at> <EOT>
  39. 1、星期日:Sunday [ˈsʌndi]],英文缩写:SUN。
  40. 2、星期一:Monday [ˈmʌndi],英文缩写:MON。
  41. 3、星期二:Tuesday [ˈtju:zdi],英文缩写:TUE。
  42. 4、星期三:Wednesday [ˈwenzdi],英文缩写:WED。
  43. 5、星期四:Thursday [ˈθə:zdi]],英文缩写:THU。
  44. 6、星期五:Friday [ˈfraidi],英文缩写:FRI。
  45. 7、星期六:Saturday [ˈsætədi]],英文缩写:SAT。
  46. # 不能在过去的时间使用at,没有后悔药
  47. at 12:12 2020-03-15
  48. at: refusing to create job destined in the past

一次性计划任务管理

  1. [@]# atq
  2. 24 Mon Mar 15 17:01:00 2021 a root
  3. 25 Sun Dec 12 17:02:00 2021 a root
  4. [@]# atrm 24
  5. [@]# atq
  6. 25 Sun Dec 12 17:02:00 2021 a root
  7. at -c job_id

一次性计划任务使用控制

at.allow
at.deny
在你的操作系统当中可能同时有多个用户在使用at命令设置一次性计划任务,那么你可以控制哪些用户可以使用计划任 务,哪些用户不可以使用计划任务。
at一次性计划任务的白名单是at.allow,黑名单是at.deny,不建议既使用黑名单,又使用白名单。建议使用白名单,白名单比黑名单力度要强。默认在CentOS系统中默认是没有at.allow文件的,可以自己创建。
at.allow的优先级是高于at.deny

周期性计划任务

仍以备份yum仓库文件的计划任务为例,下面脚本仅供参考:

  1. [@]# cat backup-yum-repo.sh
  2. #!/bin/bash
  3. mkdir /opt/yum-repo-backup-dir -p
  4. cp -r /etc/yum.repos.d /opt/yum-repo-backup-dir/yum.repos.d-`date "+%Y-%m-%d- %H:%M:%S"`.bak
  5. if [ `ls /opt/yum-repo-backup-dir/ | wc -l` -ge 10 ]
  6. then
  7. for i in `ls -tr /opt/yum-repo-backup-dir/ | head -5`
  8. do
  9. rm -rf /opt/yum-repo-backup-dir/$i
  10. done
  11. fi

Crontab命令

crontab -e:编辑当前shell用户的计划任务;
crontab -e -u user:编辑指定用户的计划任务(只有root用户可以编辑其他人的计划任务,非root用户只能编辑自己的计划任务);
crontab -l:查看当前用户的所有计划任务;
crontab -l -u user:列出指定用户的所有计划任务;

# 示例:
//每分钟一次
* * * * * /path/to/script 

//每小时的整点一次 
0 * * * * /path/to/script 

//每天凌晨1点准时运行 
0 1 * * * /path/to/script

//每天凌晨1点这个小时中的每分钟运行一次 
* 1 * * * /path/to/script 

//每个月的第一天的每分钟运行一次 
* * 1 * * /path/to/script 

//1月份中的每一分钟都运行一次 
* * * 1 * /path/to/script 

//每周第0天即周日的每一分钟 
* * * * 0 /path/to/script 

//每5分钟一次 
0/5 * * * * /path/to/script 

//每5分钟一次 
0/5 0/2 * * * /path/to/script 

//每个小时的第一分钟和第10分钟分别运行一次,例如3:01,3:10 
1,10 * * * * /path/to/script 

//每个小时的第15分钟~第20分钟每分钟运行一次,总共一小时运行6次 
15-20 * * * * /path/to/script 

//每年4月~6月,4月,5月,6月的10号和15号这2天,从0点开始,包括0点,每两个小时的第1分钟和第2分钟,第5~8分钟分别运行一次 
1,2,5-8 0/2 10,15 4-6 * /path/to/script