1. 什么是系统定时任务?
在Linux操作系统的实际使用中,我们可能会经常遇到让系统在特定时间执行某些任务的情况,例如定时采集服务器的状态信息、负载状况,或是定时执行某些任务/脚本以进行远程数据采集等。为了解决这些需求,Linux提供了定时任务服务和软件,如atd
和Crond
,用来定期执行命令或脚本,或指定特定程序任务。
一般情况下,我们安装完操作系统后,这些定时任务调度服务会默认启动。atd
和Crond
会定期(默认每分钟检查一次)查看系统是否有预定的任务工作,如果有,便会根据其预先设定的任务规则自动执行这些任务工作。这个过程类似于我们设置的闹钟,可以一次性执行或者按周期循环。
2. 计划任务的类型
计划任务主要分为一次性计划任务和长期性计划任务:
- 一次性计划任务:例如计划在今晚12点30分重启你的CentOS服务器。
- 周期性计划任务:例如每周一的凌晨3点将
/data/www
目录打包备份为backup.tar.gz
。
一次性计划任务只执行一次,一般用于临时的工作需求,可以用at
命令实现;而长期性计划任务则需要系统能够周期性、规律地执行某些具体的任务,则需要使用系统默认启动的Crond
服务。
3. at
命令的使用
3.1 at
命令的特点
at
命令用于指定一个时间执行一个任务,只能执行一次。创建at
任务有两种方式:
- 从文件输入
- 从控制台输入
3.2 at
命令的使用示例
例如,我们需要设置在今晚23:30重启HTTP服务,使用命令如下:
[root@centos ~]# at 23:30
at> systemctl restart httpd
at> <Ctrl+D>
job 3 at Mon Apr 27 23:30:00 2021
此时,我们通过按Ctrl+D
组合键来结束编写计划任务。
如果想查看已设置但未执行的一次性计划任务,可以使用at -l
命令:
[root@centos ~]# at -l
Job 3 at Mon Apr 27 23:30:00 2021
要删除已设置的任务,可以用atrm 任务序号
命令:
[root@centos ~]# atrm 3
也可以通过非交互方式创建计划一次性任务,使用管道符将两个命令连接在一起:
[root@centos ~]# echo "systemctl restart httpd" | at 23:30
job 4 at Mon Apr 27 23:30:00 2021
3.3 at
指定时间的方法
- 指定当日的时间:使用
hh:mm
(小时:分钟)的时间格式。如果时间已过,那么任务会在次日执行。例如:
[root@centos ~]# at 04:00
- 使用模糊词语:如
midnight
(深夜)、noon
(中午)、teatime
(下午茶时间,一般是下午4点)来指定时间。
[root@centos ~]# at midnight
- 12小时计时制:在时间后面加上
AM
(上午)或PM
(下午)。例如:
[root@centos ~]# at 12pm
- 指定具体日期:使用
month day
(月 日)或mm/dd/yy
(月/日/年)格式。例如:
[root@centos ~]# at 04:00 03/01/21
- 使用相对计时法:指定格式为
now + count time-units
,now
表示当前时间,time-units
为时间单位(分钟、小时、天、星期)。例如:
[root@centos ~]# at now + 5 minutes
[root@centos ~]# at 04pm + 3 days
- **使用
today
(今天)或tomorrow
(明天)来指定完成命令的时间。例如:
[root@centos ~]# at tomorrow
4. Crond服务的使用
Crond
服务用于定期执行周期性计划任务。配置Crond
任务一般通过编辑crontab
文件实现。
4.1 Crond
命令的使用示例
例如,设置每周一凌晨3点执行备份任务:
[root@centos ~]# crontab -e
在编辑器中加入以下内容:
0 3 * * 1 tar -zcvf /backup/backup.tar.gz /data/www
以上内容表示每周一的凌晨3点打包/data/www
目录到/backup
目录下,并命名为backup.tar.gz
。
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。