以下是 atq
、cron
、batch
和 at
命令的功能解析:
1. atq(查看一次性计划任务队列)
-
功能 :
显示当前用户定义的所有 一次性计划任务 ,这些任务通常由
at
命令创建。 -
语法:
atq
-
输出内容:
- 显示任务的队列编号、执行时间和任务的所有者。
-
示例:
$ atq 3 Thu Dec 21 12:00:00 2024 a user 5 Thu Dec 21 18:00:00 2024 a user
此输出表示当前用户有两个任务,分别在 12:00 和 18:00 执行。
2. cron(周期性任务调度)
-
功能 :
管理 周期性计划任务 ,支持在指定时间 反复执行。
-
配置文件:
- 系统级任务:
/etc/crontab
- 用户任务:
~/.crontab
- 系统级任务:
-
常用命令:
-
列出当前用户的任务 :
crontab -l
-
编辑当前用户的任务 :
crontab -e
-
-
示例 :
在
crontab
中添加任务,每天 2:30 运行脚本/path/to/script.sh
:30 2 * * * /path/to/script.sh
3. batch(低负载时运行任务)
-
功能 :
定义在 系统负载较低 时运行的任务。
系统会根据当前负载平均值(由
/proc/loadavg
获取)决定是否执行任务。 -
语法:
batch
输入命令后进入交互模式,可输入需要执行的任务命令。
-
示例:
$ batch at> echo "Task is running under low system load" > /tmp/batch_task.log at> <Ctrl+D>
此任务会在系统负载低时执行,并将输出写入
/tmp/batch_task.log
。
4. at(定义一次性计划任务)
常见问题
注意事项
总结
at
是一个强大而简洁的工具,适用于单次定时任务。它与 cron
互为补充,在需要调度简单任务时非常便利。
-
功能 :
定义在 特定时间 执行一次的任务。
-
语法:
at [选项] 时间 常见选项
-f <文件>
:从指定的文件中读取命令并调度执行。-l
或atq
:列出当前用户的任务队列。-d
或atrm
:删除任务。-m
:任务完成后发送邮件给用户,即使任务没有输出。-c <任务号>
:查看指定任务的内容。
时间格式
HH:MM
:24小时制的时间。noon
:中午12点。midnight
:午夜12点。now + n minutes/hours/days/weeks
:当前时间后n
分钟/小时/天/周。MMDDYY
或MM/DD/YY
:指定日期和时间。tomorrow
:明天的同一时间。
-
示例 1:指定时间运行任务:
$ at 14:00 at> echo "Task runs at 14:00" > /tmp/at_task.log at> <Ctrl+D>
在当天 14:00 执行任务。
-
示例 2:延迟运行任务:
$ at now + 2 hours at> echo "Task runs after 2 hours" > /tmp/delayed_task.log at> <Ctrl+D>
两小时后执行任务。
-
示例3:通过文件调度任务
at -f my_script.sh now + 1 hour
- 调度任务为执行文件
my_script.sh
,时间是 1 小时后。
- 调度任务为执行文件
-
查看任务 : 用
atq
或at -l 命令查看当前定义的任务。 -
删除任务 : 用
atrm
删除特定任务:atrm [任务编号]
-
at
命令权限/etc/at.allow
和/etc/at.deny
文件用于控制哪些用户可以使用at
。- 如果存在
/etc/at.allow
文件,只有列出的用户可以使用at
。 - 如果不存在
/etc/at.allow
,但存在/etc/at.deny
,所有不在/etc/at.deny
中的用户都可以使用at
。 - 如果两个文件都不存在,则只有超级用户可以使用
at
。
-
时间设置问题
- 如果指定时间已过,任务会在次日同一时间执行。
-
输出存储
- 任务的输出(如果有)会发送到用户的邮箱,前提是系统已配置邮件服务。
-
确保
atd
服务正在运行,否则at
任务无法执行:systemctl status atd
-
使用
at
的任务不支持复杂的循环逻辑,如每隔几小时执行一次,这种情况应使用cron
。
对比总结
命令 | 功能 | 是否周期性 | 是否查看/管理任务 |
---|---|---|---|
atq |
查看一次性任务队列 | 否 | 是 |
cron |
周期性运行任务 | 是 | 是 |
batch |
在系统负载低时运行任务 | 否 | 否(仅定义任务) |
at |
定义在特定时间执行一次的任务 | 否 | 否(仅定义任务) |