使用 Crontab 安排 Cron 作业

2023-10-25

Cron 是一个调度守护进程,按指定的时间间隔执行任务。这些任务称为 cron 作业,主要用于自动化系统维护或管理。

例如,您可以设置 cron 作业来自动执行重复任务,例如备份数据库或数据,使用最新的安全补丁更新系统,检查磁盘空间使用情况、发送电子邮件等。

cron 作业可以安排按分钟、小时、每月的某一天、每月、每周的某一天或这些的任意组合运行。

什么是 crontab 文件#

Crontab(cron 表)是一个文本文件,用于指定 cron 作业的计划。有两种类型的 crontab 文件。系统范围的 crontab 文件和个人用户 crontab 文件。

用户的 crontab 文件根据用户名命名,其位置因操作系统而异。在基于 Red Hat 的发行版(例如 CentOS)中,crontab 文件存储在/var/spool/cron目录,而在 Debian 和 Ubuntu 上文件存储在/var/spool/cron/crontabs目录。

虽然您可以手动编辑用户 crontab 文件,但建议使用crontab命令。

The /etc/crontab文件和里面的脚本/etc/cron.d目录是系统范围的 crontab 文件,只能由系统管理员编辑。

在大多数 Linux 发行版中,您还可以将脚本放入/etc/cron.{hourly,daily,weekly,monthly}目录,并且脚本将每隔hour/day/week/month.

Crontab 语法和运算符#

用户 crontab 文件中的每一行包含六个字段,用空格分隔,后跟要运行的命令。

* * * * * command(s)
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

前五个字段可以包含一个或多个由逗号分隔的值或由连字符分隔的一系列值。

  • *- 星号运算符表示任何值或始终。如果“小时”字段中有星号,则表示该任务将每小时执行一次。
  • ,- 逗号运算符允许您指定要重复的值列表。例如,如果您有1,3,5在“小时”字段中,任务将在凌晨 1 点、凌晨 3 点和凌晨 5 点运行。
  • -- 连字符运算符允许您指定值的范围。如果你有1-5在星期几字段中,任务将在每个工作日运行(从星期一到星期五)。
  • /- 斜杠运算符允许您指定将在它们之间的特定间隔内重复的值。例如,如果您有*/4在“小时”字段中,表示该操作将每四个小时执行一次。与指定相同0,4,8,12,16,20。您还可以使用一系列值,而不是在斜杠运算符之前使用星号,1-30/10意思是一样的1,11,21.

系统范围的 crontab 文件#

系统范围的 crontab 文件的语法与用户 crontab 略有不同。它包含一个附加的强制用户字段,指定哪个用户将运行 cron 作业。

* * * * * <username> command(s)

预定义宏#

有几个特殊的 Cron 调度宏用于指定公共间隔。您可以使用这些快捷方式代替五列日期规范。

  • @yearly (or @annually) - 每年 1 月 1 日午夜(中午 12:00)运行一次指定任务。相当于0 0 1 1 *.
  • @monthly- 每月第一天午夜运行一次指定任务。相当于0 0 1 * *.
  • @weekly- 每周周日午夜运行一次指定任务。相当于0 0 * * 0.
  • @daily- 每天午夜运行一次指定任务。相当于0 0 * * *.
  • @hourly- 每小时开始时运行一次指定的任务。相当于0 * * * *.
  • @reboot- 在系统启动时(引导时)运行指定的任务。

Linux crontab 命令#

The crontab命令允许您安装,view,或打开 crontab 文件进行编辑:

  • crontab -e- 编辑 crontab 文件,如果尚不存在则创建一个。
  • crontab -l- 显示 crontab 文件内容。
  • crontab -r- 删除当前的 crontab 文件。
  • crontab -i- 删除当前的 crontab 文件,并在删除前进行提示。
  • crontab -u <username>- 编辑其他用户的 crontab 文件。此选项需要系统管理员权限。

crontab 命令使用指定的编辑器打开 crontab 文件VISUAL or EDITOR环境变量。

crontab 变量#

cron 守护进程自动设置几个环境变量 .

  • 默认路径设置为PATH=/usr/bin:/bin。如果您正在执行的命令不存在于 cron 指定的路径中,您可以使用该命令的绝对路径或更改 cron$PATH多变的。你不能含蓄地追加:$PATH就像使用常规脚本一样。
  • 默认 shell 设置为/bin/sh。要更改不同的外壳,请使用SHELL多变的。
  • Cron 从用户的主目录调用命令。这HOME可以在 crontab 中设置变量。
  • 电子邮件通知将发送给 crontab 的所有者。要覆盖默认行为,您可以使用MAILTO环境变量,其中包含您想要接收电子邮件通知的所有电子邮件地址的列表(以逗号分隔)。什么时候MAILTO已定义但为空 (MAILTO=""),没有邮件被发送。

crontab 限制#

The /etc/cron.deny and /etc/cron.allow文件允许您控制哪些用户有权访问crontab命令。这些文件由用户名列表组成,每行一个用户名。

默认情况下,仅/etc/cron.deny 文件已存在并且为空,表示所有用户都可以使用crontab命令。如果要拒绝特定用户访问 crontab 命令,请将用户名添加到此文件中。

If the /etc/cron.allow文件存在,只有该文件中列出的用户才能使用crontab命令。

如果这两个文件都不存在,则只有具有管理权限的用户才能使用crontab命令。

Cron 作业示例#

下面是一些 cron 作业示例,展示了如何安排任务在不同时间段运行。

  • 周一至周五每天15:00运行命令:

    0 15 * * 1-5 command
  • 运行脚本每 5 分钟并将标准输出重定向到dev null,只有标准错误才会发送到指定的电子邮件地址:

    MAILTO=email@example.com
    */5 * * * * /path/to/script.sh > /dev/null
  • 每周一下午 3 点运行两个命令(使用运算符&&命令之间):

    0 15 * * Mon command1 && command2
  • 每 2 分钟运行一个 PHP 脚本将输出写入文件 :

    */2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log
  • 每天、每小时、从上午 8 点到下午 4 点整点运行一个脚本:

    00 08-16 * * * /path/to/script.sh
  • 在每月第一个星期一上午 7 点运行脚本。

    0 7 1-7 * 1 /path/to/script.sh
  • 每月 1 日和 15 日晚上 9:15 运行脚本:

    15 9 1,15 * * /path/to/script.sh
  • 设置自定义HOME, PATH, SHELL and MAILTO变量并每分钟运行一个命令。

    HOME=/opt
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    SHELL=/usr/bin/zsh
    MAILTO=email@example.com
    
    */1 * * * * command

结论#

Cron 是一个守护进程,允许您在特定日期和时间安排任务。

如果您有任何疑问,请随时发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Crontab 安排 Cron 作业 的相关文章

  • 如何检测来自 QNX 中 ncurses 的屏幕调整大小事件?

    我无法配置为接收有关使用 ncurses QNX Momentics 更改终端大小的事件 我使用Putyy作为终端 通过COM端口传输数据 我的问题是如何实现使用远程终端时接收屏幕变化事件 FILE fcons fopen dev ser1
  • 如何不断刷新屏幕并实时更新[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在linux上写一个C程序 不断刷新屏幕并实时更新 例如类似于top终端中的命令 谁能指出我正确的方向 为了保持它跨终端类型的可移
  • 从 TypeScript 运行任何 Linux 终端命令?

    有没有办法直接从 TypeScript 类中执行 Linux 终端命令 这个想法是做类似的事情 let myTerminal new LinuxTerminal let terminalResult myTerminal run sudo
  • 如何通过终端运行 JavaScript 脚本?

    例如 如果您要运行 Python 脚本 您可以输入python 文件名 py或者如果你想运行 C 程序制作文件名 then 文件名 你如何做到这一点 js files 另一个答案是 NodeJS Node js 是一个基于 Chrome 的
  • 如何编写 Perl 脚本来使用 curl 处理 URL?

    我有一个非常简单的任务 我有一个 crontab 每小时运行一个脚本 该脚本旨在简单地处理 URL 这就是我所拥有的 这不起作用 我收到语法错误 usr bin perl curl http domain com page html 我已经
  • 如何在 Mac 上设置默认 shell,例如钓鱼? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我不喜欢重新输入fish每次我启动终端时 我想Fish https en wikipedia org wiki Fish Unix she
  • 使用正则表达式模式查找 -name 并使用 cp 替换文件名

    目前我正在使用该命令cron复制 data从源到目标路径 find source path name data exec cp target path 源码结构为 source path category1 001 data source
  • 如何在 bash 上运行 MySQL 命令?

    以下代码在命令行上运行 mysql user myusername password mypassword database mydatabase execute DROP DATABASE myusername CREATE DATABA
  • 每月第 n 天运行 APScheduler 作业

    我正在寻找一个 APScheduler 触发器 它将在每月的第 n 天执行一项作业 例如 我想在每个月的第一个星期二运行一个作业 或者每个月的第一个和第三个周一 有没有人有一个触发器可以实现这一点 你可以almost使用 cron 调度程序
  • Shell Crontab 不工作

    GNU nano 2 0 9 文件 tmp crontab XXXXzBQgwS 5 check phpfpm sh 5 check nginx sh 5 disk clean sh 5 loadcheck sh 按理说我的代码应该每 5
  • 设置 Git osxkeychain 错误

    我正在设置 Git 并且正在关注http lifehacker com 5983680 how the heck do i use github http lifehacker com 5983680 how the heck do i u
  • 如何使用curl将多个参数传递给cron作业?

    我正在运行两个 cron 作业 这个执行没有问题 curl sS http example com cronjob php days 1 但这根本不运行 curl sS http example com cronjob php days 1
  • 每 30 秒运行一次 Laravel 方法

    我有一个在我调用应用程序上的特定 URL 时运行的方法 它处理数据库队列中的行 该间隔被设置为 Cron 可能的最小间隔 即 1分钟 这需要减少到 30 秒 所以我想知道如何最好地实现这一目标 我想我可以在我的脚本中构建一个循环 运行代码两
  • 使用转义序列渲染文本(如终端)

    你好 我正在寻找一些库或工具来在文本文件中呈现带有转义序列字符的文本 我不知道如何称呼它 但这是一个例子 echo e abc vdef abc def echo e abc vdef gt tmp xxxxx vi tmp xxxxx 我
  • 使用 PHP 创建、编辑和删除 crontab 作业?

    是否可以使用 PHP 创建 编辑和删除 crontab 作业 我知道如何列出 Apache 用户当前的 crontab 作业 output shell exec crontab l echo output 但是如何使用 PHP 添加 cro
  • cron、crontab 和 cronjob 之间的区别?

    从技术上讲 两者有什么区别cron crontab and cronjob 据我所知 cron是服务器上的实用程序 crontab是一个包含时间间隔和命令的文件 并且cronjob是实际的命令 或包含命令的文件 脚本 它是否正确 cron是
  • 如何将您的终端与 Android 模拟器连接

    我尝试导航到 android 工具文件夹并输入 adb shell 命令 但它似乎不起作用 我的终端似乎只能识别命令的 adb 部分 并给我一条错误消息 我究竟做错了什么 通过键入列出所有连接的设备adb devices 检查是否列出了任何
  • OS X - 输入“grails”命令后终端重置

    在我的 bash profile 中 我有以下几行 export GRAILS HOME usr share java grails export PATH PATH GRAILS HOME bin GRAILS HOME 是同一目录中 g
  • 如何使用 ANSI 转义序列捕获 bash 中终端窗口的标题?

    我在 OSX 中使用 bash 命令行 我知道 ANSI 转义序列 033 21t 将检索当前终端窗口的标题 因此 例如 echo ne 033 21t sandbox Where sandbox is the title of the c
  • 将 cron 作业配置为在 Jenkins 上每 15 分钟运行一次

    如何在 Jenkins 上每 15 分钟运行一次 cron 作业 这是我尝试过的 在 Jenkins 上 我使用以下 cron 语法设置了每 15 分钟运行一次的作业 14 但该作业每小时执行一次 而不是 15 分钟 我收到有关 cron

随机推荐

  • 使用curl命令的SSL/TLS:安全连接指南

    卷曲命令是一种发出网络请求的工具 它在通过 HTTPS 与安全服务器通信时使用 SSL TLS 默认情况下 curl尝试在可用时使用安全连接 但了解如何控制和诊断这些连接至关重要 目录 hide 1 使用客户端证书 2 指定证书类型 3 使
  • 如何使用 tqdm 创建 Python 终端进度条?

    进度条是估算和显示任务所需时间的宝贵工具 这些也可以添加到您的 Python 脚本或代码块中 以指示代码执行所需的时间 Python 中有多种可用的库 例如progressbar and tqdm可以用于此目的 目录 hide 1 什么是
  • 使用 Linux curl 命令管理 Cookie

    与 Web 应用程序交互时 您会遇到处理 cookie 和会话的需要 在本教程中 您将学习如何使用卷曲命令发送 接收和管理 cookie 目录 hide 1 手动发送 Cookie 标头 2 存储从服务器接收到的 Cookie 3 通过请求
  • 正确理解 Linux 运行级别

    您可以将 Linux 运行级别视为操作系统运行的不同 模式 每种模式或运行级别都有其打开或关闭的进程和服务列表 从 Linux 启动时起 它就始终处于某个运行级别 当您继续使用计算机时 此运行级别可能会发生变化 具体取决于操作系统需要访问的
  • Linux PS1 提示定制终极指南

    PS1 或提示字符串 1 是主要提示变量 它定义 Linux shell 环境中命令行提示的外观和元素 它提供了多个自定义选项 使您的命令提示符信息更丰富且更具视觉吸引力 本教程将讨论这些细节 增强您的命令行界面体验 目录 hide 1 查
  • 11 个令人惊叹的 NumPy Shuffle 示例

    蟒蛇的NumPy包提供了各种用于执行涉及随机性的操作的方法 例如从给定的数字列表中随机选择一个或多个数字的方法 或者生成给定范围内的随机数的方法 或者从给定分布 所有这些方法均在randomNumPy 包的模块 其中一种方法是numpy r
  • 使用 pyenv 管理多个 Python 版本

    pyenv 是一个简单而强大的工具 用于管理多个Python版本 作为一名 Python 开发人员 您可能面临过不同项目需要不同 Python 版本的情况 pyenv 为这个问题提供了一个优雅的解决方案 本质上 pyenv 是一个 Pyth
  • 如何在Ubuntu 20.04上安装Netdata监控工具

    Netdata是一款专为实时系统性能监控解决方案而设计的开源工具 它收集系统活动的实时指标 如 CPU 使用 内存使用 带宽使用和磁盘活动等 并通过图形图表在 Web 界面上显示信息 Netdata官方团队建议安装netdata监控工具使用
  • 用于删除重复数组元素的 JavaScript 程序

    数组是包含一组元素的数据结构 通常这些元素都是相同的数据类型 例如整数或字符串 但在 JavaScript 中 我们可以存储不同类型的元素 使用数组 您可以组织数据 以便可以轻松地对一组相关值进行排序或搜索 本教程向您介绍了如何使用 Jav
  • 如何在 Debian 9 上安装 Python 3.9

    Python 是一种面向对象的高级编程语言 它是一个拥有大型社区的开源软件 Python 被 Google 等顶级科技公司用作关键语言 Python 3 9 稳定版本已发布 包含多项改进和安全更新 它包括多个新模块 改进的现有模块和许多其他
  • 如何在 Debian11 上安装和保护 Apache

    Apache HTTP Web 服务器是广泛使用的 Web 服务器之一 尤其是在 Linux 发行版上 它是一种免费的跨平台 被互联网上的大量网站使用 Apache Web 服务器使用 HTTP 来处理请求并接收 Web 信息 Apache
  • 如何在 Ubuntu、CentOS 和 Fedora 上设置 Hadoop 2.6.5(单节点集群)

    阿帕奇Hadoop 2 6 5与之前的稳定 2 X Y 版本相比有显着改进 该版本在HDFS和MapReduce方面有很多改进 本操作指南将帮助您在 CentOS RHEL 7 6 5 Ubuntu 和其他基于 Debian 的操作系统上安
  • C# 中的空合并运算符 (??)

    在 C 领域 程序员使用许多运算符来执行各种操作 并且每个运算符都有其独特的功能 空合并运算符 就是这样一个运算符 通常被视为管理空值的重要实用程序 什么是空合并运算符 空合并运算符是一个二元运算符 可简化对空值的检查并在遇到空值时定义默认
  • Linux 中的 su 命令及有用示例

    The su 命令也称为切换用户 该命令用于在登录会话期间成为另一个用户 当没有用户名调用时 su 默认切换到超级用户 基本上 su 命令用于将当前登录的用户更改为另一个用户 而无需从系统注销 它是 Linux 终端用户经常使用的命令 本教
  • 如何在 Amazon Linux 2 上安装 Python 3.11

    Amazon Linux 2 是由 Amazon Web Services AWS 团队开发的操作系统 您可以使用此操作系统启动 Amazon ec2 实例 此外 磁盘映像可用于主要的虚拟机管理程序平台 Python 是一种功能强大的通用编
  • 如何在 Python 中读取文本文件

    使用 Python 应用程序时 您需要使用 Python 读取和写入文本文件 您可以参考我们的其他教程用Python编写文本文件 在 Python 中读取文本文件是一个简单的过程 可以使用几种不同的方法来完成 在本文中 我们将介绍以下在 P
  • 如何在 Ubuntu 18.04、16.04 和 LinuxMint 19/18 上安装和使用 Cordova

    阿帕奇科尔多瓦是一个开源移动开发框架 它允许您使用 HTML5 CSS3 和 JavaScript 等标准 Web 技术进行跨平台开发 避免每个移动平台的原生开发语言 Apache Cordova 命令行需要 Node js 才能在 NPM
  • 如何在 Ubuntu 22.04 上安装 Node.js

    Node正在成为开发者构建前端应用程序的首选 此外 许多开发人员正在使用它来构建 REST API 和 CRUD 该编程语言由 OpenJS 基金会开发 运行在 Chrome 的 v8 引擎上 Node js 适用于大多数现代操作系统 包括
  • 如何在 Ubuntu 18.04 和 16.04 LTS 上安装 Dovecot

    本教程将帮助您在 Ubuntu 系统上安装 Dovecot Dovecot 包为 POP IMAP 协议提供服务 通过这些协议 您可以从远程客户端访问电子邮件帐户 步骤 1 在 Ubuntu 上安装 Dovecot Dovecot 软件包可
  • 使用 Crontab 安排 Cron 作业

    Cron 是一个调度守护进程 按指定的时间间隔执行任务 这些任务称为 cron 作业 主要用于自动化系统维护或管理 例如 您可以设置 cron 作业来自动执行重复任务 例如备份数据库或数据 使用最新的安全补丁更新系统 检查磁盘空间使用情况