标签 at 下的文章

Linux 定时任务

黑色星期五的时候买了一个 hostbrr 的储存盒子,实际就是一个空间比较大的提供了 ssh 权限的 directadmin 面板虚拟主机,在折腾其定时任务时发现,crontab 提供了一些我不知道的参数,呵呵。于是对其搜索后发现,我对 Linux 定时任务认识不够,于是摘抄这篇文章,算是对Linux 定时任务 crontab这篇文章的补充。 crontab crontab 是 Linux 系统中用于设置周期性执行任务的工具,允许用户根据自己的需求创建、修改和删除定时任务。它通过定义一系列的时间字段来精确控制任务的执行时间,并且可以执行任何有效的命令或脚本。 时间字段 crontab 的时间格式由五个部分组成,每个部分之间用空格分隔,具体如下: 分钟 (Minute):取值范围为0-59,表示每小时中的哪一分钟执行任务。 小时 (Hour):取值范围为0-23,表示每天的哪个小时执行任务。 日期 (Day of Month):取值范围为1-31,表示每月的具体某一天执行任务。 月份 (Month):取值范围为1-12 或使用英文缩写如jan, feb 等,表示每年的具体某个月执行任务。 星期 (Day of Week):取值范围为0-7(其中0 和7 都代表星期日),表示每周的具体某天执行任务。 特殊字符 为了更灵活地定义任务执行的时间规则,crontab 支持以下几种特殊字符: *:通配符,表示该字段的所有可能值。 ,:枚举多个值,例如1,15 表示第 1 分钟和第 15 分钟。 -:表示一个范围内的值,例如8-11 表示从第 8 分钟到第 11 分钟。 /n:步长,例如*/5 表示每隔 5 分钟执行一次。 示例 crontab -e 编辑 每分钟执行一次命令:* * * * * /path/to/command 每天凌晨 2 点执行备份命令:0 2 * * * /path/to/backup.sh 每周一至周五上午 9 点发送邮件提醒:0 9 * * 1-5 /path/to/mail-reminder.sh 快速参考表 时间单位 取值范围 示例 秒(可选) 0 - 59 */10 每 10 秒 分钟 0 - 59 */5 每 5 分钟 小时 0 - 23 14 下午 2 点 日 1 - 31 1 每月的第一天 月 1 - 12 1 一月 星期 0 - 7 (0 和 7 都是周日) 0 周日 此外,还有一些快捷方式可以帮助简化常见的调度模式: @yearly 或 @annually:每年 1 月 1 日午夜执行一次。 @monthly:每月第一天午夜执行一次。 @weekly:每周日凌晨执行一次。 @daily 或 @midnight:每天午夜执行一次。 @hourly:每小时开始时执行一次。 @reboot:系统启动时执行一次。 at 与 crontab 不同,at 命令主要用于安排一次性任务,即只在指定的时间点执行一次的任务。一旦任务完成,就不会再重复执行。at 使用起来相对简单,适合于那些只需要执行一次的操作,比如发送一封邮件或运行一个临时性的脚本。 安装与启动服务 确保atd 服务已安装并正在运行。可以通过以下命令检查和启动服务: systemctl status atd # 查看状态 systemctl start atd # 启动服务 如果尚未安装at,可以通过包管理器进行安装,例如在基于 Red Hat 的系统上使用yum: yum install at -y 提交任务 要提交一个任务以在未来某个时间点执行,可以使用at 命令后跟时间参数。例如,要在今天下午 3 点执行一个命令,你可以这样做: echo "command" | at 3pm today 对于更加复杂的任务,比如执行一个多行脚本,可以直接输入命令直到按Ctrl+D 结束输入: at now + 1 hour at> /path/to/script.sh at> <Ctrl+D> 这里now + 1 hour表示从现在起一个小时后执行任务。 时间格式 at 支持多种时间格式,包括但不限于: HH:MM:当天的某个时刻。 HH:MM YYYY-MM-DD:具体的年月日及时刻。 HH:MM am/pm [Month] [Date]:支持 AM/PM 格式的日期。 HH:MM + num [minutes | hours | days | weeks]:当前时间基础上增加一定的时间间隔。 例如,如果你想让任务在三天后的中午 12 点执行,可以这样写: at noon + 3 days 管理任务 列出所有待执行的任务:at -l或者atq。 删除特定编号的任务:at -r job_number或者atrm job_number。 crontab 和 at 都是非常有用的命令行工具,它们各自适用于不同的场景。选择哪一个取决于你想要实现的任务性质——是需要定期重复执行的任务还是只需要执行一次的任务。掌握这两个工具的基础语法将大大提高你在 Linux 环境下的工作效率。 本文编辑自:https://mp.weixin.qq.com/s/jiQUNOCFaAFqErNY8Sa3Aw...