Linux定时任务调度

在 Linux 中,存在一些需要特定时间去执行某个命令或者程序的需求。相当于给指定的命令或者程序定个闹钟,时间一到就去执行。有点类似 JAVA 中的定时器。在 Linux 中,这一概念被称为定时任务调度,使用crond相关指令执行。任务调度分为两种,一种是系统工作(必须周周而复始执行的重要操作,如系统的病毒扫描),第二种则是用户工作(是用户想要执行的某些程序,例如重要文件的定期备份)。下面介绍其相关语法及一次性的定时任务。

1.定时任务调度

设置任务调度的流程:使用crontab -e创建个人任务调度 → 输入任务到调度文件。例如:

bash 复制代码
crontab -e
*/1 * * * * ls -l /etc/ > /tmp/to.txt  //代表每小时的每一分钟都会执行一次该命令(将etc目录下的文件按照列表形式展示并重复该到/tmp/to.txt文件中)

接下来解释语法中各个参数的具体含义:

  • 第一个*:代表一小时当中的第几分钟(0-59)
  • 第二个*:代表一天当中的第几个小时(0-23)
  • 第三个*:代表一个月当中的第几天(1-31)
  • 第四个*:代表一年当中的第几个月(1-12)
  • 第五个*:代表一周当中的星期几(0-7,0 和 7 都表示星期天)
  • ",":代表不连续的时间(0 3,6,8 * * * 代表每天的 3 点 0 分,6 点 0 分,8 点 0 分都执行一次)
  • "-":代表连续时间(0 5 * * 1-6 代表星期一到星期六,每天 5 点执行命令)
  • "*/n":代表每隔过久执行一次( */10 * * * * 代表每 10 分钟执行一次)

其他指令:

bash 复制代码
crontab -r 终止任务调度
crontab -l 列出当前都有哪些任务调度
service crond restart 重启任务调度

2.at 定时任务

at 命令是一次性定时任务,at 的守护进程 atd 会以后台模式运行。默认情况下,atd 守护进程每 60 秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。注意,执行该命令之前要确保 atd 进程处于开启状态(可使用ps -ef命令查看)。可使用atq命令查看系统中有没有执行的工作任务

指令格式:at 选项 时间。通过两次 Ctrl + D 结束命令的输入

bash 复制代码
选项解释:
-m 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
-I atq的别名
-d atrm的别名
-v 显示任务将被执行的时间
-c 打印任务的内容到标准输出
-V 显示版本信息
-q 队列:使用指定的队列
-f 文件:从指定文件读入任务而不是从标准输入读入
-t 时间参数:以时间参数的形式提交要运行的任务
bash 复制代码
时间部分的定义:
- hh:mm的格式 :例如04:00
- 使用midnight,noon等比较模糊的时间词语
- 使用12小时计时制,即加上AM或者PM,例如3am(上午三点),7pm(下午7点)
- 使用具体日期。格式为month day(月日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。例如:04:00 2021-03-1
- 使用相对计时法。格式为now + count time-units,now就是当前时间,time-units是时间单位这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量(几小时,几天)。例如:now +5 minutes
- 直接使用today(今天)、tomorrow(明天)来指定完成命令的时间

这里针对 at 一次性定时任务举几个例子

bash 复制代码
2天后的下午5点执行/bin/ls /home
at 5pm +2 days
at> /bin/ls /home


明天17点,输出时间到/root/date200.log内
at 5pm tomorrow
at> date > /root/date200.log

2分钟后,输出时间到/root/date100.log内
at now +2 minutes
at> date > /root/date100.loG

合理使用任务调度,会在处理一些业务需求时起到事半功倍的效果,或者在功能的实现过程中更加自动化,减少重复的操作行为。不只是命令,还可以定时的制定自定义的脚本,例如使用dump命令编辑文件备份脚本,结合任务调度就可以做到系统的无人值守备份。所以任务调度对于运维开发来说还是非常重要的~

相关推荐
辉灰笔记1 小时前
MySQL8 意外关机/误移data目录导致服务启动失败 PID报错/权限报错 修复文档
linux·数据库·mysql·centos
ylscode2 小时前
CVE-2026-31694 漏洞深度分析:Linux 内核 FUSE 组件存在本地提权风险,普通用户可直取 root 权限
linux·运维·服务器
无足鸟ICT4 小时前
【RHCA+】bash命令
linux·开发语言·bash
weixin_307779134 小时前
Linux下Docker Compose里运行的MySQL数据库故障诊断Shell脚本
linux·运维·mysql·docker·自动化
小生不才yz4 小时前
Shell脚本精读 · S14-02 | 脚本模板:从 20 行工具到可维护项目
linux
x-cmd4 小时前
Linus 9 年前说「模糊测试有效」——今天已成 OSS-Fuzz 时代铁律
linux·ai·rust·开源·自动化·agent·安全性测试
六点_dn5 小时前
Linux学习笔记-chmod命令
linux·笔记·学习
编程令我快乐5 小时前
windows单次传linux文件太大
linux·运维·服务器
AOwhisky5 小时前
Python 基础语法(上篇 + 下篇)——综合自测题
linux·windows·python
浮江雾6 小时前
Flutter第四节------核心概念学习笔记:从基础语法到异步编程
linux·服务器·开发语言·笔记·flutter·入门·基础