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命令编辑文件备份脚本,结合任务调度就可以做到系统的无人值守备份。所以任务调度对于运维开发来说还是非常重要的~

相关推荐
2035去旅行9 小时前
bootcmd 详细讲解
linux·嵌入式·arm·soc
陈希12310 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
女神下凡11 小时前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
且从容.14 小时前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道14 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
且从容.17 小时前
ubuntu安装flink
linux·ubuntu·flink
爱和冰阔落19 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨19 小时前
WSL2的安装与使用
linux·wsl
微小的鱼19 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng20 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器