crond 任务调度
概述
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:
1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
2.个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 数据库的备份。
基本语法
crontab [选项]
常用选项
-e 编辑crontab定时任务
-l 查询crontab定时任务
-r 删除当前用户所有的crontab任务
快速入门
设置任务调度文件:/etc/crontab
设置个人任务调度。执行 crontab –e 命令。
接着输入任务到调度文件如:/1 * ls –l /etc/ > /tmp/to.txt
意思说每分钟执行 ls –l /etc/ > /tmp/to.txt
[root@localhost ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost tmp]# crontab -l
*/1 * * * * ls -l /etc/ > /tmp/to.txt
[root@localhost ~]# cd /tmp
[root@localhost tmp]# ll
总用量 1024
drwx------. 2 root root 4096 11月 3 21:18 ssh-Sl4YGWihXro7
drwx------. 3 root root 4096 11月 3 21:18 systemd-private-9cd7622a79a84ef78bfd45cb34648df3-bolt.service-pZmHLj
drwx------. 3 root root 4096 11月 3 21:18 systemd-private-9cd7622a79a84ef78bfd45cb34648df3-chronyd.service-TnzxvZ
drwx------. 3 root root 4096 11月 3 21:18 systemd-private-9cd7622a79a84ef78bfd45cb34648df3-colord.service-0qfBGO
drwx------. 3 root root 4096 11月 3 21:18 systemd-private-9cd7622a79a84ef78bfd45cb34648df3-cups.service-kjUlkg
drwx------. 3 root root 4096 11月 3 21:19 systemd-private-9cd7622a79a84ef78bfd45cb34648df3-fwupd.service-xsg4C5
drwx------. 3 root root 4096 11月 3 21:18 systemd-private-9cd7622a79a84ef78bfd45cb34648df3-rtkit-daemon.service-V5F32c
-rw-r--r--. 1 root root 17079 11月 3 22:15 to.txt
drwx------. 2 root root 4096 8月 10 22:11 tracker-extract-files.0
drwxrwxrwt. 2 root root 4096 11月 2 20:41 VMwareDnD
drwx------. 2 root root 4096 11月 3 21:18 vmware-root
drwx------. 2 root root 4096 11月 3 21:18 vmware-root_7303-3846082670
-rw-------. 1 root root 488893 11月 2 20:40 yum_save_tx.2021-11-02.20-40.3wLFUq.yumtx
-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
案例 3: 每天凌晨 2:00 将 mysql 数据库 testdb ,备份到文件中。提示: 指令为mysql dump -u root -p 密码 数据库 > /home/db.bak<br />步骤
- crontab -e步骤
- 0 2 * * * mysqldump -u root -proot testdb > /home/db.bak
<a name="GXmBg"></a>
## crond 相关指令
crontab –r:终止任务调度。<br />crontab –l:列出当前有那些任务调度<br />service crond restart [重启任务调度]
<a name="Oo6Mx"></a>
# at定时任务
<a name="k9eNF"></a>
## 基本介绍
1. at 命令是一次性定时计划任务,at 的守护进程 atd 会以后台模式运行,检查作业队列来运行。
1. 默认情况下,atd 守护进程每 60 秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
1. at 命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
1. 在使用 at 命令的时候,一定要保证 atd 进程的启动 , 可以使用相关指令来查看
1. ps -ef | grep atd //可以检测 atd 是否在运行
<a name="vRDgS"></a>
## 基本语法
```shell
at [选项] [时间]
Ctrl + D 结束 at 命令的输入 (连续输2次)
常用选项
-m 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出。
-I atq的别名
-d atrm的别名
-v 显示任务将被执行的时间
-c 打印任务的内容到标准输出
-V 显示版本信息
-q<队列> 使用指定的队列
-f<文件> 从指定文件读入任务而不是从标准输入读入
-t<时间参数> 以时间参数的形式提交要运行的任务
at 时间定义
at 指定时间的方法:
- 接受在当天的 hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。 例如:04:00
- 使用 midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午 4 点)等比较模糊的词语来指定时间。
- 采用 12 小时计时制,即在时间后面加上 AM(上午)或 PM(下午)来说明是上午还是下午。 例如:12pm
- 指定命令执行的具体日期,指定格式为 month day(月 日)或 mm/dd/yy(月/日/年)或 dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。 例如:04:00 2021-03-1
- 使用相对计时法。指定格式为:now + count time-units ,now 就是当前时间,time-units 是时间单位,这里能够是 minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count 是时间的数量,几天,几小时。 例如:now + 5 minutes
- 直接使用 today(今天)、tomorrow(明天)来指定完成命令的时间。
应用实例
案例 1:2 天后的下午 5 点执行 /bin/ls /home
案例 2:atq 命令来查看系统中没有执行的工作任务[root@localhost ~]# at 5pm + 2 days
at> /bin/ls /home<EOT>
job 1 at Sat Nov 6 17:00:00 2021
[root@localhost ~]# atq
1 Sat Nov 6 17:00:00 2021 a root
案例 3:明天 17 点钟,输出时间到指定文件内 比如 /root/date100.log
案例 4:2 分钟后,输出时间到指定文件内 比如 /root/date200.log[root@localhost ~]# at 5pm tomorrow
at> date > /root/date100.log<EOT>
job 2 at Fri Nov 5 17:00:00 2021
[root@localhost ~]# atq
2 Fri Nov 5 17:00:00 2021 a root
1 Sat Nov 6 17:00:00 2021 a root
案例 5:删除已经设置的任务 , atrm 编号atrm 1 //表示将 job 队列,编号为 1 的 job 删除.[root@localhost ~]# at now + 2 minutes
at> date > /root/date200.log<EOT>
job 3 at Thu Nov 4 22:56:00 2021
[root@localhost ~]# atq
2 Fri Nov 5 17:00:00 2021 a root
3 Thu Nov 4 22:56:00 2021 a root
1 Sat Nov 6 17:00:00 2021 a root
[root@localhost ~]# atq
2 Fri Nov 5 17:00:00 2021 a root
1 Sat Nov 6 17:00:00 2021 a root
[root@localhost ~]# atrm 1
[root@localhost ~]# atq
2 Fri Nov 5 17:00:00 2021 a root