Linux任务调度工具
前言
本文是视频教程韩顺平 一周学会Linux部分章节的归纳总结,内容补充和错误纠正。
概述
Linux中的任务调度是指在特定的时间或条件下执行预定的任务。crond
和at
都是Linux中用于任务调度的工具。crond
可以周期性地执行任务,而at
则可以在指定的时间点执行任务。它们都可以帮助用户在特定的时间或条件下自动执行预定的任务,提高工作效率。
crond
简要介绍
crond
是Linux系统中的一个守护进程,负责周期性地执行预定的任务。它根据预设的时间表(通常是crontab
文件)来触发任务的执行。crontab
文件包含了一系列的任务定义,每个任务定义包括了任务的执行时间、执行的命令或脚本等信息。crond
会根据这些定义,按照设定的时间间隔周期性地执行任务。常见的时间间隔包括每分钟、每小时、每天、每周、每月等。
需要注意的是,at
命令在某些系统上可能未预装(本人使用的Ubuntu 22.04未预装),可能需要通过包管理器安装。
基本语法
corntab [选项]
:选项如下
选项 | 说明 |
---|---|
-e |
编辑corntab 文件 |
-l |
查询corntab 定时任务调度 |
-r |
递归删除corntab 定时任务调度 |
编辑crontab
文件的格式:分 时 日 月 周 要执行的命令或脚本
定时规则
其中的分 时 日 月 周
是cron
的定时规则,也称为【cron表达式】,它还支持一些特殊字符和符号,例如通配符(*)、范围(-)、逗号(,)、间隔(/)等,以提供更灵活的调度选项。
示例
这么说可能有点抽象,让我们看看下面具体的crontab
文件示例说明:
10 18 * * * ls /root/cat >> /home/user/watch.log
:每天18点10分执行ls /root/cat >> /home/user/watch.log
命令* 18 8 1 * ls /root/cat >> /home/user/watch.log
:每年1月8日的18点执行ls /root/cat >> /home/user/watch.log
命令0 9 * * 1-5 /home/myshell.sh
:每周一到周五的9点执行/home/myshell.sh
脚本0 9 * * 1,5 /home/myshell.sh
:每周一和每周五的9点执行/home/myshell.sh
脚本*/5 * * * * ls /root/cat >> /home/user/watch.log
:每隔5分钟执行ls /root/cat >> /home/user/watch.log
命令
at
简要介绍
at
是另一个任务调度工具,它允许用户在指定的时间执行一次性的任务。与crond
不同,at
不会周期性地执行任务,而是在指定的时间点执行一次任务。用户可以使用at
命令来创建任务,并指定任务的执行时间和要执行的命令或脚本。at
命令可以接受多种时间格式,如绝对时间、相对时间等。
atd
(at
守护进程)是一个后台进程,负责管理at
命令提交的任务。atd
进程会根据系统时间和任务的执行时间进行调度,并将任务分配给合适的执行环境。
默认情况下,atd
守护进程每60秒检测作业队列,如果存在作业时间并且当前时间匹配,则运行
基本语法
在执行at
命令前,我们得先确认atd
守护进程是否在运行中:
ps -ef | gerp atd
:查看活跃进程,后面接上管道命令过滤出atd
线程
确定atd
线程开启后,我们可以使用at
命令了,下面是at
命令的说明
at [选项] [时间]
:具体选项说明如下表
选项 | 说明 |
---|---|
-m |
指定任务执行完成后,通过邮件通知任务的所有者。 |
-l |
列出待执行的任务列表。 |
-r |
删除指定的任务。 |
-q 队列 |
指定任务队列的名称。 |
-t 时间 |
指定任务的执行时间。 |
-f 文件 |
指定要执行的命令或脚本文件。 |
-I |
忽略任务执行时的标准输入。 |
-V |
显示at 命令的版本信息。 |
-c |
显示任务的命令行内容。 |
输入完at
命令后就可以进入编辑状态,在此界面输入执行的命令或脚本,使用Ctrl
+D
退出
atq
:可以查看队列中未执行的定时任务信息,包括任务编号atrm 任务编号
:移除指定编号的定时任务
定时规则
与crontab
的定时规则不一样,at
有很多种的定时规则:
时间规则 | 说明 |
---|---|
绝对时间 | 使用24小时制的绝对时间来指定任务的执行时间。例如,at 12:30 表示任务将在当天的12:30执行。 |
相对时间 | 使用相对时间来指定任务的执行时间。相对时间可以是当前时间的偏移量。例如,at now + 1 hour 表示任务将在当前时间的1小时后执行。时间单位还有:days ,minutes ,weeks 。 |
特定日期和时间 | 指定具体的日期和时间来执行任务。例如,at 2023-07-04 09:00 表示任务将在2023年7月4日的9:00执行。 |
关键字 | at 指令支持一些关键字来指定特定的时间点,例如midnight (午夜)、noon (中午)和teatime (下午4点)。例如,at midnight 表示任务将在每天的午夜执行。today ,tomorrow 也是可以的。 |
时间表达式 | 使用时间表达式来指定更复杂的时间规则。时间表达式使用特定的语法来描述任务的执行时间。例如,at 10:00pm + 2 days 表示任务将在两天后的晚上10点执行。 |
示例
在晚上10点执行位于
/path/to/script.sh
的脚本。1
2
3at 10:00 PM
/path/to/script.sh
Ctrl+D在当前时间的1小时后执行命令,将”Hello, world!”写入到
/path/to/output.txt
文件中1
2
3at now + 1 hour
echo "Hello, world!" > /path/to/output.txt
Ctrl+D