文章目录
- 0、系列目录
- 1、应用场景
- 2、周期性任务 - crontab
- 安装 crontab
- 创建任务
- 参数解释
- 其他命令
- 3、一次性任务 - at
- 安装 at
- 创建任务
- 查看任务
- 删除任务
- 时间参数
- 4、总结
0、系列目录
写这套文章的时候,不会完全按照目录的顺序一篇一篇写, 大家可以到目录中直接找到对应的章节进行查看。
点我跳转
1、应用场景
实际生产中,总有一些任务需要定时执行:
- 定期清理日志
- 定期执行备份
- 定期检测服务是否正常
实现的方式也有很多种,可以自己写服务来监测、可以使用 pm2
。
我们今天介绍两个最简单、最基础,也是最常用的,at
和 crontab
。
2、周期性任务 - crontab
这里先介绍周期性任务 crontab
,这个在我们实际生产中使用的更多一些。
安装 crontab
CentOS 默认自带 crontab
,可以用以下命令检测是否已安装 crontab
:
[root@docker]# rpm -qa | grep crontab
crontabs-1.11-6.20121102git.el7.noarch
看到如上返回值,说明 crontab
已正常安装。
如果未安装,直接使用 yum
安装即可。
yum install -y crontabs
创建任务
这里以「每隔 5min 检测一次超时进程」为例,shell
脚本在 这里。
创建 /root/opshell
目录,我一般习惯把运维脚本都统一放在一起,这里就假设是 /root/opshell
。
我们把执行脚本放到目录下:
[root@docker]# ls /root/opshell/timeout_task_monitor.sh
/root/opshell/timeout_task_monitor.sh
同时,给脚本赋予可执行权限:
[root@docker]# chmod +x /root/opshell/timeout_task_monitor.sh
执行 crontab -e
命令来创建计划任务:
[root@docker]# crontab -e
编辑器的使用方式和 vim
一样,不赘述了,这里我们先把内容编辑为:
*/5 * * * * /root/opshell/timeout_task_monitor.sh >>/tmp/logs/task.log
这句话的含义是:每隔五分钟执行一次 /root/opshell/timeout_task_monitor.sh
脚本,并把输出内容写入 /tmp/logs/task.log
文件。
保存退出,任务会自动开始执行。
参数解释
我们对上面写好的配置做一个简单的解释。
# .---------------- 分钟,取值范围为 0-59,*/5 表示每5分钟
# | .------------- 小时,取值范围为 0-23
# | | .---------- 日,取值范围为 1-31
# | | | .------- 月,取值范围为 1-12
# | | | | .---- 星期,取值范围为 0-7,0 和 7 都表示星期日
# | | | | | .-- 要执行的命令
# | | | | | |
*/5 * * * * /root/opshell/timeout_task_monitor.sh >>/tmp/logs/task.log
这里需要注意的是,/root/opshell/timeout_task_monitor.sh >>/tmp/logs/task.log
是作为一个完整的参数,是一个整体,上面的参数可以理解为:
分钟 小时 日 月 星期 命令
另一点需要注意的是,命令中使用到的路径,尽量写成 绝对路径
,避免出现奇奇怪怪的问题。
推荐大家一个在线服务 crontab执行时间分析器,有需要的同学可以试试。
其他命令
查询任务
[root@docker]# crontab -l
*/5 * * * * /root/opshell/timeout_task_monitor.sh >>/tmp/logs/task.log
删除任务
慎用,会删除当前用户的所有任务,一般推荐用
crontab -e
去手动修改。
[root@docker]# crontab -r
3、一次性任务 - at
安装 at
与 crontab
类似,at
也是被 CentOS
默认安装的,可以执行以下命令检测以下:
[root@docker]# rpm -qa | grep at
at-3.1.13-24.el7.x86_64
看到类似上面的输出,说明系统中已经有 at
了,如果没有的话,同样使用 yum
安装即可,不赘述。
创建任务
[root@docker]# at 12:00 2021-03-17
at> ls /root > /tmp/test_log.log
at> <EOT>
job 3 at Wed Mar 17 12:00:00 2021
按 Ctrl + D
可以提交任务。
这里我们执行了一次 ls /root
,并把结果输出到 /tmp/test_log.log
中。
查看任务
[root@docker]# atq
3 Wed Mar 17 12:00:00 2021 a root
这里的查看任务只会显示待执行的任务。
这个就是我们刚刚创建好的那个。
删除任务
[root@docker]# atrm 3
可以使用 atrm
来删除待执行的任务,这里的参数 3
是指任务id,即上面 atq
查询结果的第一列的内容。
时间参数
对于 at
命令来说,最核心的应该就是设置任务开始时间了。
时间类型 | 格式 | 示例 |
---|---|---|
绝对时间 | HH:MM, DD.MM.YY, MM/DD/YY, YYYY-MM-DD | at 12:00 2021-1-1 |
相对时间 | now + count 时间单位 | at now + 4 minutes |
模糊时间 | noon(12:00PM), midnight(12:00AM),teatime(4:00PM) | at noon |
上面的 时间单位
可选值为:minutes
,hours
,days
,weeks
。
4、总结
以上就是 CentOS 常用的定时任务/计划任务使用方式,主要是 crontab
和 at
。
本篇文章使用的系统版本是 CentOS 7.6
,其他发型版本的 Linux 可能略有出入。
今天就分享这些。
祝大家变的更强。