原创文章
全文阅读大约需要10分钟

一、Linux定时任务介绍
在Linux的日常系统运维中,运维工程师经常会需要定时执行一些特定的工作,比如备份文件,打印并追加操作日志。这些工作可能需要一致的频率才进行,可能也需要偶尔进行一次,Linux提供这样一种机制,允许操作者可以定时执行某项任务,方便管理。
任务调度:是指系统在某个时间执行的特定命令或程序。
任务调度根据执行任务级别的不同,可以分为:
1、系统工作:重要的工作,定期杀毒。
2、用户工作:备份重要文件。
二、定时任务基本语法
基本语法如下:
crontab [-u username] [-e | -l | -r]
参数说明:
-u :表示指定某个用户才可以执行定时任务。
-e :进入编辑页面,指定执行频率和需要执行的具体任务。可以是 shell 文件,也可以是确定的 Linux 语句。
-l :列表显示所有的在执行的任务列表。
-r :清除任务列表,注意,是全部清空。
重启定时任务:
> service crond restart
cron表达式:
cron表达式并不是Linux特有的一种语法结构,它可以通过一组数字以及特定的语法,来规定时间频率,在Spring Boot 的定时任务中也有大量的应用。所以,cron 表达式也是非常重要的一块学习内容。

cron 表达式有5个占位符,每个占位符分别代表不同的时间含义。* 代表匹配该占位符意义下的所有时间,比如第一个 * 就代表每分钟。
特殊占位符:

cron表达式包括 * 号有四种特殊的占位符,* 前面已经说过了,可以匹配任何时间。 "," 为了表示不连续的时间点,比如cron表达式中第二位是“6,10,14,18”就代表6点执行、10点执行、14点执行、18点执行。
"-" 就代表时间段,指的是在某段时间内都执行。"/" 表示每个多久执行一次,比如分钟位如果是: "*/2"就代表2分钟执行一次,小时位如果是:"*/3" 就代表每3小时执行一次。
三、常规案例解析
Linux定时任务属于实操类型的功能,了解了基本语法和关键参数之后,就可以试着分析案例来真正掌握这一技能了。

案例一
任务描述:将 /etc下的文件列表每分钟追加到 /home/etc_files.txt 文件中。
任务分析:这个任务是将列表信息追加到文件,可以采用 ls 显示 /etc 目录下的文件列表,然后采用 >> 追加符号来完成追加工作。
操作步骤:
1、打开 crontab 任务编辑器:

cron -e
2、编辑任务内容:

编辑任务内容
3、保存退出后即可生效。
以上三步就完成了最基本的定时任务功能,我们可以查看一下执行结果:

可以看到,1分钟过后,在 /home目录下成功创建出了一个 etc_files.txt文件,且内容正是 /etc目录下的文件列表。
这里需要提出的是案例中cron表达式 "*/1 * * * *" 代表每分钟执行一次,这符合"/" 的含义,同时,如果cron 表达式为"* * * * *" 依然可以达到同样的效果。
案例二
任务描述:每天凌晨2点,将mysql数据库testdb备份到mydb.bak文件中。
任务分析:这个操作是要备份数据库,我们可以使用shell 脚本来执行任务内容,然后再通过 crond 来完成任务调度,从而完成任务。
操作步骤:
1、首先创建bakdatabase.sh文件,并编写任务脚本:

2、为bakdatabase.sh 添加可执行权限:

3、编辑 crond 定时任务:


查看任务
注意:在编写shell 文件之后,一定要为脚本文件附加一个可执行的权限,否则系统无法成功调度任务。

四、扩展
crond 作为linux的基础服务,有时候我们会需要查看一下它的进程是否已经启动。

不过一般情况下,Linux系统会默认启动 crond进程,不需要用户手动来启动。
不知道大家有没有猜到,实际上,crontab是一个通用的配置文件,在/etc目录下,Linux为我们提供了更加多样的配置文件,如:corn.hourly、cron.daily 等,如果小伙伴想了解更多相关内容的话,可以自己去网上搜索一下。
另外,我们说crond 是定时执行任务,那么有没有一种只需要执行一次就不需要再执行了的任务调度方式呢?
答案是有的。
在Linux 中,提供了一种只执行一次的任务调度器 at 命令。它的基本语法非常简单易懂:
at [-f] [-v]
-f 的含义是指定需要执行的 shell 脚本文件。而 -v 则表示指定时间。比如:
at -f /home/bakdatabase.sh -v 18:00
就表示在今天18点的时候执行 bakdatabase.sh 脚本文件。
好了,综上就是关于Linux 任务调度的相关内容,喜欢的小伙伴赶紧点个收藏吧。
---欢迎关注【Java圣斗士】,我是你们的小可爱(✪ω✪) Morty---
---专注IT职场经验、IT技术分享的灵魂写手---
---每天带你领略IT的魅力---
---期待与您陪伴!---