Linux 黑话解释:什么是定时任务
创始人
2024-03-02 09:27:53
0

在本期的《Linux 黑话解释》系列文章中,你将了解到 Linux 中的 定时任务 cron job 功能。你将通过学习编辑 crontab 文件来创建定时任务。

何为定时任务

cron 是一个用于按计划运行短小且快速的命令的实用命令行工具。该工具是一个方便、经典的系统管理工具,通过和其他工具结合使用可以自动运行各式各样的任务。比如,有些人通过把 rsynccron 结合使用,在特定的时间自动创建每日备份和每周备份。也有些人使用 cron 来分析服务器日志,并且结合邮件系统功能,在日志检测到错误时自动发送告警邮件。

cron 就如同“瑞士军刀”一样,可以多场景多样化使用。尽可能发挥你的想象,去挖掘它的功能。

其实 cron 的使用很容易上手,只需要几秒钟。不过在我们开始上手之前,先来讨论下几个经常容易混淆的概念。

cron、定时任务、crontab

有三个术语比较容易混淆:cron、定时任务和 crontab,让我们来看看它们的含义:

术语含义
cron这是安装在系统上的实际执行定时任务的 守护进程
定时任务“任务”是指一段启动并运行的程序。cron 可以按照约定的时间计划运行各种任务,这样的任务通常叫做“定时任务”。
crontab这是一个文件,用于定义定时任务。一个 crontab 文件可以通过表格形式(每一行就是一个定时任务)定义多个定时任务。

来看一个简单例子:创建一个定时任务,每小时向 crontabl_log.txt 文件打印 Linux is cool!

0 * * * *  echo "Linux is Cool!" >> ~/crontab_log.txt

是不是这么个简单定时任务的例子都让你感到惊恐,这是因为你需要懂得如何去读懂一个定时任务的属性。

我将在后文中讲述这个基础理论知识。

上手 cron

我们通过另一个例子来看看 cron 如何工作。

为了创建定时任务(或者说 cron 将要执行的命令任务),你只需要运行:

crontab -e

这将会打开一个文件,用于编辑定时任务:

Crontab default view

其中,所有以 # 开头的行都是注释,用于指导你如何使用 cron,如果觉得没用可以删除它们。

我们将创建如下任务,作为我们的第一个定时任务:

* * * * * touch ~/crontab_test

让我快速看看该任务将会做什么:

定时任务都是以 “分钟 小时 天 月 周 命令” 形式呈现:

  • 分钟:指该任务在哪一分钟会被执行。所以,该值为 0 则代表在每个小时开始时运行,5 则代表在每个小时的第 5 分钟会运行。
  • 小时:指该任务在一天中的哪个小时会被执行,取值范围为 0-23。没有 24 的原因是 23 时的末尾是半夜 11:59,然后就是每天的开始 0 时。分钟的取值范围定义逻辑与之类似。
  • 天:指一个月中的哪一天执行该任务,取值范围是 1-31(不同于前面的分钟和小时从 0 开始取值)。
  • 月:指该任务在哪个月被执行,取值范围是 1-12
  • 周:指该任务在星期几被执行,从周日开始算起,取值范围是 0-6(分别对应周日、周一到周六)。
  • 命令:是你想要运行的命令任务。

如果想对 “分钟 小时 天 月 周” 部分有更详细的理解,可以参考 Crontab guru 网站,该网站可以帮助你理解正在执行什么。

接着之前的例子 * * * * * touch ~/crontab_test,表示每分钟创建一次 ~/crontab_test 文件。

让我们将该任务编辑进 crontab 然后看看执行结果:

等到下一分钟,你就会发现你的家目录下多了文件 crontab_test:

这便是 cron 的基础应用示例。

一个实用的定时任务示例

假设你想创建一个脚本,用于拷贝多个目录内容到一个路径并打包作为备份,该如何实现?

通过 cron 定时任务就可以很容易实现该功能。

请看如下脚本:

#!/usr/bin/bash
echo "Backing up..."
mkdir -p ~/.local/tmp/
tar -Pc ~/Documents/ -f ~/.local/tmp/backup.gz

该脚本做了如下事情:

  1. 确保备份路径目录 ~/.local/tmp/ 存在。
  2. 将目录 ~/Documents/ 下的所有内容打包至文件 ~/.local/tmp/backup.gz

我们先来手动运行该脚本,看看它到底如何工作。

首先,我们在家目录(~)下创建该脚本,命令为 backup_script,如下图所示:

然后编辑 backup_script 脚本,写入上面那个脚本代码。

接着,赋予 backup_script 可执行权限:

最后运行脚本 ~/backup_script,进行功能验证:

你可以通过运行命令 tar -xf ~/.local/tmp/backup.gz -C 来进行备份恢复,这里 是指文件要恢复到的路径目录。

接下来,就可以用 cron 工具来进行定时任务运行该脚本了。

举个例子,假设需要每天的凌晨 3 点运行该备份脚本,你可以在 crontab 中输入如下命令:

* 3 * * * ~/backup_script

这样你就可以每天自动进行备份操作了。

后记

本文简单介绍了定时任务功能。尽管我不确定 Linux 桌面用户使用该功能多不多,但我知道定时任务功能被许多系统管理员广泛应用。如果你有什么想法,欢迎在评论区留言。


via: https://itsfoss.com/cron-job/

作者:Hunter Wittenborn 选题:lujun9972 译者:jrglinux 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

编写CentOS系统下的B...
面对重复繁琐的服务器操作,手动输入命令效率低下且易出错。为了解决这...
2025-06-15 08:43:24
CentOS默认邮件配置位...
CentOS系统自带邮件服务功能解析 作为Linux服务器常用发行...
2025-03-01 23:21:47
部署后,CRON任务未按照...
解决此问题的方法取决于您的具体应用和环境。下面是一个通用的解决方案...
2025-01-07 16:00:39
不确定为什么我的Ubunt...
在Ubuntu 16.04上,cron作业可能不会在重启后自动运行...
2024-12-27 22:01:29
Bullseye升级--c...
在Bullseye中,systemd默认在用户级别下执行cron任...
2024-12-26 16:30:20
Bulljob在cron中...
确认是否正确引入了 bull、bull-board 和 cron ...
2024-12-26 16:01:06

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...