1. 什么是系统定时任务?

在Linux操作系统的实际使用中,我们可能会经常遇到让系统在特定时间执行某些任务的情况,例如定时采集服务器的状态信息、负载状况,或是定时执行某些任务/脚本以进行远程数据采集等。为了解决这些需求,Linux提供了定时任务服务和软件,如atdCrond,用来定期执行命令或脚本,或指定特定程序任务。

一般情况下,我们安装完操作系统后,这些定时任务调度服务会默认启动。atdCrond会定期(默认每分钟检查一次)查看系统是否有预定的任务工作,如果有,便会根据其预先设定的任务规则自动执行这些任务工作。这个过程类似于我们设置的闹钟,可以一次性执行或者按周期循环。

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指定时间的方法

  1. 指定当日的时间:使用hh:mm(小时:分钟)的时间格式。如果时间已过,那么任务会在次日执行。例如:
[root@centos ~]# at 04:00
  1. 使用模糊词语:如midnight(深夜)、noon(中午)、teatime(下午茶时间,一般是下午4点)来指定时间。
[root@centos ~]# at midnight
  1. 12小时计时制:在时间后面加上AM(上午)或PM(下午)。例如:
[root@centos ~]# at 12pm
  1. 指定具体日期:使用month day(月 日)或mm/dd/yy(月/日/年)格式。例如:
[root@centos ~]# at 04:00 03/01/21
  1. 使用相对计时法:指定格式为now + count time-unitsnow表示当前时间,time-units为时间单位(分钟、小时、天、星期)。例如:
[root@centos ~]# at now + 5 minutes
[root@centos ~]# at 04pm + 3 days
  1. **使用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多平台发布


逼格高的汤圆
7 声望2 粉丝