一.单一例行性任务
1.at
at
命令是 Linux 和 Unix 系统中用于调度任务的命令。它允许用户在指定的时间运行某个命令或脚本。at
命令特别适合一次性任务的调度,而不是定期的任务(对于定期任务,通常使用 cron
命令)。
基本用法
at [OPTION] TIME
-
OPTION
:用于指定额外的选项。 -
TIME
:任务执行的时间,可以是具体的时间(如14:00
或now + 1 hour
)或相对时间。
常用选项
-
-f
:指定一个文件,该文件中的命令将在指定时间执行。 -
-m
:在任务完成后发送电子邮件通知用户。 -
-q
:指定任务队列。 -
-l
:列出当前用户的待执行任务。 -
-r
:移除指定的任务。 -
-s
:执行时不发出邮件通知。
常用文件
1.黑白名单
黑名单 /etc/at.deny
白名单 /etc/at.allow
2.日志文件
/var/log/cron
3.储存任务源文件
/var/spool/cron/
示例
1. 在特定时间运行命令
at 14:00
输入该命令后,可以在提示符下输入要执行的命令,输入完成后按 Ctrl+D
结束。
echo "Hello, World!" > hello.txt
2. 使用相对时间
at now + 1 hour
这将使得在当前时间的一个小时后执行命令。可以再次输入需要执行的命令。
3. 从文件执行命令
如果你有一组命令保存在一个文件中,可以使用 -f
选项:
at -f /path/to/script.sh 14:00
4. 列出当前任务
查看当前用户的所有调度任务:
at -l
5. 删除任务
使用 -r
选项可以删除指定的任务。在删除之前,可以先使用 at -l
查看任务 ID:
at -r [job_id]
例如:
at -r 5
6. 使用邮件通知
如果希望在任务完成后收到邮件,可以使用 -m
选项:
at -m 14:00
时间格式
at
命令支持多种时间格式,以下是一些常见的格式:
- 具体时间:
HH:MM
(24小时制),如15:30
。 - 现在加上一段时间:
now + [number] [time unit]
,如now + 1 hour
、now + 30 minutes
。 - 具体日期和时间:
MMDD
或MMDDYY
,如1016
(10月16日)或101620
(2020年10月16日)。 - 周几:
Monday
、Tuesday
等,或today
、tomorrow
。
注意事项
-
atd
服务必须在系统中运行,以便执行调度的任务。 - 默认情况下,
at
命令会将任务结果发送到用户的邮箱,确保邮件服务正常运行。 - 可以使用tail -f 动态显示日志文件
- 可以使用watch -n 1 /path/feilname 监视某个目录的变化
小结
at
命令非常适合于一次性任务的调度,它简化了在指定时间运行命令的过程。通过结合选项和时间格式,可以灵活地管理和执行任务。
二.循环执行的例行性工作
2.crontab
1. crontab
基本命令
查看当前用户的 crontab
crontab -l
编辑 crontab
crontab -e
删除当前用户的 crontab
crontab -r
编辑其他用户的 crontab
(需要超级用户权限)
sudo crontab -e -u username
2. crontab
文件格式
crontab
文件包含一系列的调度任务,每一行代表一个任务,格式如下:
* * * * * command_to_execute
各个字段的含义
- 第一个字段:分钟(0 - 59)
- 第二个字段:小时(0 - 23)
- 第三个字段:日期(1 - 31)
- 第四个字段:月份(1 - 12)
- 第五个字段:星期几(0 - 7),其中 0 和 7 都代表星期日
-
command_to_execute
:要执行的命令或脚本
常用文件
黑白名单
黑名单 /etc/cron.deny
白名单 /etc/cron.allow
日志文件
3. 示例
每小时执行一次
0 * * * * /path/to/script.sh
每天凌晨 2 点执行
0 2 * * * /path/to/script.sh
每周一的中午 12 点执行
0 12 * * 1 /path/to/script.sh
每月的第一天执行
0 0 1 * * /path/to/script.sh
每 5 分钟执行一次
*/5 * * * * /path/to/script.sh
每小时的第 15 分钟和第 45 分钟执行
15,45 * * * * /path/to/script.sh
4. 特殊字符
crontab
中可以使用一些特殊字符来简化设置:
-
*
:表示所有可能的值。 -
,
:用于指定多个值,如1,2,3
。 -
-
:用于指定范围,如1-5
。 -
/
:用于指定增量,如*/2
表示每 2 个单位。 - %需要使用/来转义
5. 示例说明
一些更复杂的示例:
每月的最后一天执行
59 23 28-31 * * [ "$(date +\%d -d tomorrow)" == "01" ] && /path/to/script.sh
每 10 分钟执行一次,但在 18:00 到 20:00 之间不执行
*/10 * * * * [ $(date +\%H) -lt 18 -o $(date +\%H) -gt 20 ] && /path/to/script.sh
6. 查看系统的 crontab
除了用户的 crontab
,系统还可以有全局的 crontab
,通常位于 /etc/crontab
,格式类似,但它包含一个额外的字段用于指定用户。
7. 处理输出
crontab
中运行的命令的输出(标准输出和标准错误)会通过邮件发送到执行用户的邮箱。为了避免邮件通知,可以将输出重定向到 /dev/null
:
* * * * * /path/to/script.sh > /dev/null 2>&1
见名知意可知这是一个类似于垃圾筒的东西
8. 常见问题与注意事项
-
时区问题:
cron
使用的是系统时间,所以如果有时区变化,可能需要调整。 -
环境变量:
cron
的执行环境和用户的终端环境不同,可能需要在crontab
中显式设置必要的环境变量。 -
run-parts /path/dir/ 可以执行当前文件下的可执行文件,前提是确保拥有足够权限去执行
-
写入某个命令时,如果是外部命令,确保你的程序能够找到对应的文件,区分内置命令和外部命令可以使用type命令,以及有可以解释的解释器
9. 小结
crontab
是一个强大的工具,用于在 Unix 和 Linux 系统中调度和自动化任务。通过合理使用,可以极大地提高系统管理的效率。