定时任务
1. at
1.1 介绍
at只能执行一次
- 需要启动atd服务
- 白名单:/etc/at.allow (系统默认没有这个文件)
- 黑名单:/etc/at.deny
- 如果两个文件都不存在,只有root用户可以访问at
1.2 配置
at 选项 时间
[root@localhost sh]# at now + 2minutes
at> /sh/hello.sh >>/tmp/hello.log
at> <EOT>
job 1 at Wed Jan 5 08:46:00 2022
[root@localhost sh]# date
Wed Jan 5 08:45:46 PST 2022
[root@localhost sh]# atq
1 Wed Jan 5 08:46:00 2022 a root
[root@localhost sh]# at -c 1
上面的配置表示2min之后执行并保存结果在/tmp/hello.log
其他命令:
at -c 工作号:查询指定定时任务
atrm 工作号:删除指定定时任务
…
at不常用,不再做解释
2. crontab循环执行定时任务
2.1 解释
- 需要运行crond服务
- 黑名单:/etc/cron.deny
- 白名单:/etc/cron.allow
2.2 配置
2.2.1 命令行方式
crontab命令:
-e:编辑定时任务
-l:列出定时任务列表
编辑格式:
、 * * * * * 执行的任务
项目 | 含义 | 范围 |
---|---|---|
第一个* | 一小时当中的第几分钟 | 0-59 |
第二个* | 一天当中的第几个小时 | 0-23 |
第三个* | 一个月当中的第几天 | 1-31 |
第四个* | 一年当当中的第几月 | 1-12 |
第五个* | 一周当中的星期几 | 0-7(0和7都代表星期天) |
一些特殊符号:
特殊符号 | 含义 |
---|---|
* | 代表任何时间,比如第一个*就代表一小时中,每分钟都执行一次 |
, | 代表不连续时间。比如:“0 8,10,12,18 * * *命令”, 它代表在每天的8点、10点、12点、18点的0分都执行一次 |
- | 代表连续时间,比如"10 10 * * 1-6"命令,代表在周一到周六的10点10分执行命令 |
*/n | 代表每隔多久执行一次。比如"*/10 * * * * 命令",代表每隔10分钟执行一次命令 |
举例:
10 * * * * 命令:在每个小时的第十分钟执行
2.2.2 注意事项
- 六个选项均不能为空
- 不能实现年和秒
- 日期和星期不要同时出现
- 最好都使用绝对路径
2.2.3 配置文件方式
- 配置文件为止:/etc/crontab
1 SHELL=/bin/bash
2 PATH=/sbin:/bin:/usr/sbin:/usr/bin
3 MAILTO=root
4
5 # For details see man 4 crontabs
6
7 # Example of job definition:
8 # .---------------- minute (0 - 59)
9 # | .------------- hour (0 - 23)
10 # | | .---------- day of month (1 - 31)
11 # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
12 # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
13 # | | | | |
14 # * * * * * user-name command to be executed
15 * * * * * root run-parts /sh/>>/tmp/123.txt
记住咯:
- 格式必须如15行一样。
- 运行的必须是一个目录,会定时执行目录里面的所有脚本