RHCE第一章记录

一.单一例行性任务

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 hournow + 30 minutes
  • 具体日期和时间:MMDD 或 MMDDYY,如 1016(10月16日)或 101620(2020年10月16日)。
  • 周几:MondayTuesday 等,或 todaytomorrow

注意事项

  • 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

日志文件

/var/log/cron
配置文件
/var/spool/cron
监管者
crond
查状态通用命令
systemctl status 程序名

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 系统中调度和自动化任务。通过合理使用,可以极大地提高系统管理的效率。

上一篇:第二十一篇——公理体系:几何的系统理论从何而来?-三、过程


下一篇:AWS S3迁移到阿里云OSS实践