crond 任务调度

概述

任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:
1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
2.个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 数据库的备份。

基本语法

  1. crontab [选项]
  2. 常用选项
  3. -e 编辑crontab定时任务
  4. -l 查询crontab定时任务
  5. -r 删除当前用户所有的crontab任务

快速入门

设置任务调度文件:/etc/crontab
设置个人任务调度。执行 crontab –e 命令。
接着输入任务到调度文件如:/1 * ls –l /etc/ > /tmp/to.txt
意思说每分钟执行 ls –l /etc/ > /tmp/to.txt

  1. [root@localhost ~]# crontab -e
  2. no crontab for root - using an empty one
  3. crontab: installing new crontab
  4. [root@localhost tmp]# crontab -l
  5. */1 * * * * ls -l /etc/ > /tmp/to.txt
  6. [root@localhost ~]# cd /tmp
  7. [root@localhost tmp]# ll
  8. 总用量 1024
  9. drwx------. 2 root root 4096 11 3 21:18 ssh-Sl4YGWihXro7
  10. drwx------. 3 root root 4096 11 3 21:18 systemd-private-9cd7622a79a84ef78bfd45cb34648df3-bolt.service-pZmHLj
  11. drwx------. 3 root root 4096 11 3 21:18 systemd-private-9cd7622a79a84ef78bfd45cb34648df3-chronyd.service-TnzxvZ
  12. drwx------. 3 root root 4096 11 3 21:18 systemd-private-9cd7622a79a84ef78bfd45cb34648df3-colord.service-0qfBGO
  13. drwx------. 3 root root 4096 11 3 21:18 systemd-private-9cd7622a79a84ef78bfd45cb34648df3-cups.service-kjUlkg
  14. drwx------. 3 root root 4096 11 3 21:19 systemd-private-9cd7622a79a84ef78bfd45cb34648df3-fwupd.service-xsg4C5
  15. drwx------. 3 root root 4096 11 3 21:18 systemd-private-9cd7622a79a84ef78bfd45cb34648df3-rtkit-daemon.service-V5F32c
  16. -rw-r--r--. 1 root root 17079 11 3 22:15 to.txt
  17. drwx------. 2 root root 4096 8 10 22:11 tracker-extract-files.0
  18. drwxrwxrwt. 2 root root 4096 11 2 20:41 VMwareDnD
  19. drwx------. 2 root root 4096 11 3 21:18 vmware-root
  20. drwx------. 2 root root 4096 11 3 21:18 vmware-root_7303-3846082670
  21. -rw-------. 1 root root 488893 11 2 20:40 yum_save_tx.2021-11-02.20-40.3wLFUq.yumtx
  22. -rw-------. 1 root root 488916 11 3 21:20 yum_save_tx.2021-11-03.21-20.dp08hX.yumtx

命令参数细节说明

  • 5 个占位符的说明 | 项目 | 含义 | 范围 | | —- | —- | —- | | 第一个 | 一小时当中的第几分钟 | 0-59 | | 第二个 | 一天当中的第几小时 | 0-23 | | 第三个 | 一个月当中的第几天 | 1-31 | | 第四个 | 一年当中的第几月 | 1-12 | | 第五个 * | 一周当中的星期几 | 0-7(0和7都代表星期日) |

  • 特殊符号的说明 | 特殊符号 | 含义 | | —- | —- | | | 代表任何时间,比如第一个就代表一个小时中每分钟都执行一次的意思 | | , | 代表不连续的时间,比如”0 8,12,16 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令 | | - | 代表连续的时间分为,比如”0 5 1-6 命令”,代表在周一到周六的凌晨5点0分执行命令 | | /n | 代表每隔多久执行一次,比如”/10 * 命令”,代表每隔10分钟就执行一次命令 |

  • 特殊时间执行案例 | 命令 | 含义 | | —- | —- | | 45 22 命令 | 在22点45分执行命令 | | 0 17 1 命令 | 每周1的17点0分执行命令 | | 0 5 1,15 命令 | 每月1号和15号的凌晨5点0分执行命令 | | 40 4 1-5 命令 | 每周一到周五的凌晨4点30分执行命令 | | /10 4 命令 | 每天的凌晨4点,每隔10分钟执行一次命令 | | 0 0 1,15 1 命令 | 每月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天,非常容易让管理员混乱。 |

应用实例

案例 1:每隔 1 分钟,就将当前的日期信息,追加到 /tmp/mydate 文件中
/1 * date >> /tmp/mydate
案例 2:每隔 1 分钟, 将当前日期和日历都追加到 /home/mycal 文件中
步骤:

  • vim /home/my.sh 写入内容 date >> /home/mycal 和 cal >> /home/mycal
  • 给 my.sh 增加执行权限,chmod u+x /home/my.sh
  • crontab -e 增 加 /1 /home/my.sh ```shell [root@localhost home]# cat my.sh date >> /home/mycal cal >> /home/mycal [root@localhost home]# chmod u+x my.sh [root@localhost home]# ll 总用量 48 -rw-r—r—. 1 root root 0 7月 4 23:11 cat.txt -rw-r—r—. 1 root root 4 7月 4 22:42 hello.txt drwxr-xr-x. 2 root root 4096 7月 4 23:16 home drwxrwx—-. 5 jack police 4096 11月 2 21:36 jack drwx———. 3 jerry police 4096 11月 2 21:12 jerry -rw-r—r—. 1 root root 1721 7月 4 23:04 myhome.tar.gz -rw-r—r—. 1 root root 3478 7月 4 23:15 myhome.ter.gz -rw-r—r—. 1 root root 1847 7月 4 22:51 myhome.zip -rwxr—r—. 1 root root 39 11月 3 22:24 my.sh -rw-r—r—. 1 root root 130 7月 4 23:13 pc.tar.gz -rw-r—r—. 1 root root 0 7月 4 23:11 pig.txt drwx———. 3 tom tom 4096 4月 11 2018 tom drwx———. 5 xh police 4096 11月 2 21:36 xh drwx———. 3 xq bandit 4096 11月 2 21:13 xq [root@localhost home]# ./my.sh [root@localhost home]# ll 总用量 52 -rw-r—r—. 1 root root 0 7月 4 23:11 cat.txt -rw-r—r—. 1 root root 4 7月 4 22:42 hello.txt drwxr-xr-x. 2 root root 4096 7月 4 23:16 home drwxrwx—-. 5 jack police 4096 11月 2 21:36 jack drwx———. 3 jerry police 4096 11月 2 21:12 jerry -rw-r—r—. 1 root root 481 11月 3 22:28 mycal -rw-r—r—. 1 root root 1721 7月 4 23:04 myhome.tar.gz -rw-r—r—. 1 root root 3478 7月 4 23:15 myhome.ter.gz -rw-r—r—. 1 root root 1847 7月 4 22:51 myhome.zip -rwxr—r—. 1 root root 39 11月 3 22:27 my.sh -rw-r—r—. 1 root root 130 7月 4 23:13 pc.tar.gz -rw-r—r—. 1 root root 0 7月 4 23:11 pig.txt drwx———. 3 tom tom 4096 4月 11 2018 tom drwx———. 5 xh police 4096 11月 2 21:36 xh drwx———. 3 xq bandit 4096 11月 2 21:13 xq [root@localhost home]# cat mycal 2021年 11月 03日 星期三 22:29:22 CST 十一月 2021
    日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [root@localhost home]# crontab -e crontab: installing new crontab [root@localhost home]# crontab -l
    /1 ls -l /etc/ > /tmp/to.txt /1 * /home/my.sh [root@localhost home]# cat mycal 2021年 11月 03日 星期三 22:29:22 CST 十一月 2021
    日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

2021年 11月 03日 星期三 22:32:01 CST 十一月 2021
日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

  1. 案例 3: 每天凌晨 2:00 mysql 数据库 testdb ,备份到文件中。提示: 指令为mysql dump -u root -p 密码 数据库 > /home/db.bak<br />步骤
  2. - crontab -e步骤
  3. - 0 2 * * * mysqldump -u root -proot testdb > /home/db.bak
  4. <a name="GXmBg"></a>
  5. ## crond 相关指令
  6. crontab r:终止任务调度。<br />crontab l:列出当前有那些任务调度<br />service crond restart [重启任务调度]
  7. <a name="Oo6Mx"></a>
  8. # at定时任务
  9. <a name="k9eNF"></a>
  10. ## 基本介绍
  11. 1. at 命令是一次性定时计划任务,at 的守护进程 atd 会以后台模式运行,检查作业队列来运行。
  12. 1. 默认情况下,atd 守护进程每 60 秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
  13. 1. at 命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
  14. 1. 在使用 at 命令的时候,一定要保证 atd 进程的启动 , 可以使用相关指令来查看
  15. 1. ps -ef | grep atd //可以检测 atd 是否在运行
  16. <a name="vRDgS"></a>
  17. ## 基本语法
  18. ```shell
  19. at [选项] [时间]
  20. Ctrl + D 结束 at 命令的输入 (连续输2次)
  21. 常用选项
  22. -m 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出。
  23. -I atq的别名
  24. -d atrm的别名
  25. -v 显示任务将被执行的时间
  26. -c 打印任务的内容到标准输出
  27. -V 显示版本信息
  28. -q<队列> 使用指定的队列
  29. -f<文件> 从指定文件读入任务而不是从标准输入读入
  30. -t<时间参数> 以时间参数的形式提交要运行的任务

at 时间定义

at 指定时间的方法:

  1. 接受在当天的 hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。 例如:04:00
  2. 使用 midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午 4 点)等比较模糊的词语来指定时间。
  3. 采用 12 小时计时制,即在时间后面加上 AM(上午)或 PM(下午)来说明是上午还是下午。 例如:12pm
  4. 指定命令执行的具体日期,指定格式为 month day(月 日)或 mm/dd/yy(月/日/年)或 dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。 例如:04:00 2021-03-1
  5. 使用相对计时法。指定格式为:now + count time-units ,now 就是当前时间,time-units 是时间单位,这里能够是 minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count 是时间的数量,几天,几小时。 例如:now + 5 minutes
  6. 直接使用 today(今天)、tomorrow(明天)来指定完成命令的时间。

    应用实例

    案例 1:2 天后的下午 5 点执行 /bin/ls /home
    1. [root@localhost ~]# at 5pm + 2 days
    2. at> /bin/ls /home<EOT>
    3. job 1 at Sat Nov 6 17:00:00 2021
    4. [root@localhost ~]# atq
    5. 1 Sat Nov 6 17:00:00 2021 a root
    案例 2:atq 命令来查看系统中没有执行的工作任务
    案例 3:明天 17 点钟,输出时间到指定文件内 比如 /root/date100.log
    1. [root@localhost ~]# at 5pm tomorrow
    2. at> date > /root/date100.log<EOT>
    3. job 2 at Fri Nov 5 17:00:00 2021
    4. [root@localhost ~]# atq
    5. 2 Fri Nov 5 17:00:00 2021 a root
    6. 1 Sat Nov 6 17:00:00 2021 a root
    案例 4:2 分钟后,输出时间到指定文件内 比如 /root/date200.log
    1. [root@localhost ~]# at now + 2 minutes
    2. at> date > /root/date200.log<EOT>
    3. job 3 at Thu Nov 4 22:56:00 2021
    4. [root@localhost ~]# atq
    5. 2 Fri Nov 5 17:00:00 2021 a root
    6. 3 Thu Nov 4 22:56:00 2021 a root
    7. 1 Sat Nov 6 17:00:00 2021 a root
    案例 5:删除已经设置的任务 , atrm 编号atrm 1 //表示将 job 队列,编号为 1 的 job 删除.
    1. [root@localhost ~]# atq
    2. 2 Fri Nov 5 17:00:00 2021 a root
    3. 1 Sat Nov 6 17:00:00 2021 a root
    4. [root@localhost ~]# atrm 1
    5. [root@localhost ~]# atq
    6. 2 Fri Nov 5 17:00:00 2021 a root