返回顶部
首页 > 资讯 > 操作系统 >在Linux中如何使用cron计划任务
  • 226
分享到

在Linux中如何使用cron计划任务

2023-06-16 12:06:05 226人浏览 安东尼
摘要

这篇文章主要介绍在linux中如何使用cron计划任务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!常见(和非常见)的 cron 用途我使用 cron 服务去安排一些常见的事情,比如,每天凌晨 2:00 发生的定期备

这篇文章主要介绍在linux中如何使用cron计划任务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

常见(和非常见)的 cron 用途

我使用 cron 服务去安排一些常见的事情,比如,每天凌晨 2:00 发生的定期备份,我也使用它去做一些不常见的事情。

  • 许多电脑上的系统时钟(比如,操作系统时间)都设置为使用网络时间协议(NTP)。 NTP 设置系统时间后,它不会去设置硬件时钟,它可能会“漂移”。我使用 cron 基于系统时间去设置硬件时钟。

  • 我还有一个 Bash 程序,我在每天早晨运行它,去在每台电脑上创建一个新的 “每日信息” (MOTD)。它包含的信息有当前的磁盘使用情况等有用的信息。

  •  许多系统进程和服务,像 Logwatch、logrotate、和 Rootkit Hunter,使用 cron 服务去安排任务和每天运行程序。

crond 守护进程是一个完成 cron 功能的后台服务。

cron 服务检查在 /var/spool/cron 和 /etc/cron.d 目录中的文件,以及 /etc/anacrontab 文件。这些文件的内容定义了以不同的时间间隔运行的 cron 作业。个体用户的 cron 文件是位于 /var/spool/cron,而系统服务和应用生成的 cron 作业文件放在 /etc/cron.d 目录中。/etc/anacrontab 是一个特殊的情况,它将在本文中稍后部分介绍。

使用 crontab

cron 实用程序运行基于一个 cron 表(crontab)中指定的命令。每个用户,包括 root,都有一个 cron 文件。这些文件缺省是不存在的。但可以使用 crontab -e 命令创建在 /var/spool/cron 目录中,也可以使用该命令去编辑一个 cron 文件(看下面的脚本)。我强烈建议你,不要使用标准的编辑器(比如,Vi、Vim、EMacs、Nano、或者任何其它可用的编辑器)。使用 crontab 命令不仅允许你去编辑命令,也可以在你保存并退出编辑器时,重启动 crond 守护进程。crontab 命令使用 Vi 作为它的底层编辑器,因为 Vi 是预装的(至少在大多数的基本安装中是预装的)。

现在,cron 文件是空的,所以必须从头添加命令。 我增加下面示例中定义的作业到我的 cron 文件中,这是一个快速指南,以便我知道命令中的各个部分的意思是什么,你可以自由拷贝它,供你自己使用。

# crontab -e shell=/bin/bash MaiLTO=root@example.com PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # |  .------------- hour (0 - 23) # |  |  .---------- day of month (1 - 31) # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ... # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # |  |  |  |  | # *  *  *  *  * user-name  command to be executed # backup using the rsbu program to the internal 4TB HDD and then 4TB external 01 01 * * * /usr/local/bin/rsbu -vbd1 ; /usr/local/bin/rsbu -vbd2 # Set the hardware clock to keep it in sync with the more accurate system clock 03 05 * * * /sbin/hwclock --systohc # PerfORM monthly updates on the first of the month # 25 04 1 * * /usr/bin/dnf -y update

crontab 命令用于查看或编辑 cron 文件。

上面代码中的前三行设置了一个缺省环境。对于给定用户,环境变量必须是设置的,因为,cron 不提供任何方式的环境。SHELL 变量指定命令运行使用的 shell。这个示例中,指定为 Bash shell。MAILTO 变量设置发送 cron 作业结果的电子邮件地址。这些电子邮件提供了 cron 作业(备份、更新、等等)的状态,和你从命令行中手动运行程序时看到的结果是一样的。第三行为环境设置了 PATH 变量。但即使在这里设置了路径,我总是使用每个程序的完全限定路径。

在上面的示例中有几个注释行,它详细说明了定义一个 cron 作业所要求的语法。我将在下面分别讲解这些命令,然后,增加更多的 crontab 文件的高级特性。

01 01 * * * /usr/local/bin/rsbu -vbd1 ; /usr/local/bin/rsbu -vbd2

在我的 /etc/crontab 中的这一行运行一个脚本,用于为我的系统执行备份。

这一行运行我自己编写的 Bash shell 脚本 rsbu,它对我的系统做完全备份。这个作业每天的凌晨 1:01 (01 01) 运行。在这三、四、五位置上的星号(*),像文件通配符一样代表一个特定的时间,它们代表 “一个月中的每天”、“每个月” 和 “一周中的每天”,这一行会运行我的备份两次,一次备份内部专用的硬盘驱动器,另外一次运行是备份外部的 USB 驱动器,使用它这样我可以很保险。

接下来的行我设置了一个硬件时钟,它使用当前系统时钟作为源去设置硬件时钟。这一行设置为每天凌晨 5:03 分运行。

03 05 * * * /sbin/hwclock --systohc

这一行使用系统时间作为源来设置硬件时钟。

我使用的第三个也是***一个的 cron 作业是去执行一个 dnf 或 yum 更新,它在每个月的***天的凌晨 04:25 运行,但是,我注释掉了它,以后不再运行。

# 25 04 1 * * /usr/bin/dnf -y update

这一行用于执行一个每月更新,但是,我也把它注释掉了。

其它的定时任务技巧

现在,让我们去做一些比基本知识更有趣的事情。假设你希望在每周四下午 3:00 去运行一个特别的作业:

00 15 * * Thu /usr/local/bin/mycronjob.sh

这一行会在每周四下午 3:00 运行 mycronjob.sh 这个脚本。

或者,或许你需要在每个季度末去运行一个季度报告。cron 服务没有为 “每个月的***一天” 设置选项,因此,替代方式是使用下一个月的***天,像如下所示(这里假设当作业准备运行时,报告所需要的数据已经准备好了)。

02 03 1 1,4,7,10 * /usr/local/bin/reports.sh

在季度末的下一个月的***天运行这个 cron 作业。

下面展示的这个作业,在每天的上午 9:01 到下午 5:01 之间,每小时运行一次。

01 09-17 * * * /usr/local/bin/hourlyreminder.sh

有时,你希望作业在业务期间定时运行。

我遇到一个情况,需要作业在每二、三或四小时去运行。它需要用期望的间隔去划分小时,比如, */3 为每三个小时,或者 6-18/3 为上午 6 点到下午 6 点每三个小时运行一次。其它的时间间隔的划分也是类似的。例如,在分钟位置的表达式 */15 意思是 “每 15 分钟运行一次作业”。

*/5 08-18/2 * * * /usr/local/bin/mycronjob.sh

这个 cron 作业在上午 8:00 到下午 18:59 之间,每五分钟运行一次作业。

需要注意的一件事情是:除法表达式的结果必须是余数为 0(即整除)。换句话说,在这个例子中,这个作业被设置为在上午 8 点到下午 6 点之间的偶数小时每 5 分钟运行一次(08:00、08:05、 08:10、 08:15……18:55 等等),而不运行在奇数小时。另外,这个作业不能运行在下午 7:00 到上午 7:59 之间。(LCTT 译注:此处本文表述有误,根据正确情况修改)

我相信,你可以根据这些例子想到许多其它的可能性。

限制访问 cron

普通用户使用 cron 访问可能会犯错误,例如,可能导致系统资源(比如内存和 CPU 时间)被耗尽。为避免这种可能的问题, 系统管理员可以通过创建一个 /etc/cron.allow 文件去限制用户访问,它包含了一个允许去创建 cron 作业的用户列表。(不管是否列在这个列表中,)不能阻止 root 用户使用 cron。

通过阻止非 root 用户创建他们自己的 cron 作业,那也许需要将非 root 用户的 cron 作业添加到 root 的 crontab 中, “但是,等等!” 你说,“不是以 root 去运行这些作业?” 不一定。在这篇文章中的***个示例中,出现在注释中的用户名字段可以用于去指定一个运行作业的用户 ID。这可以防止特定的非 root 用户的作业以 root 身份去运行。下面的示例展示了一个作业定义,它以 “student” 用户去运行这个作业:

04 07 * * * student /usr/local/bin/mycronjob.sh

如果没有指定用户,这个作业将以 contab 文件的所有者用户去运行,在这个情况中是 root。

cron.d

目录 /etc/cron.d 中是一些应用程序,比如 SpamAssassin 和 sysstat 安装的 cron 文件。因为,这里没有 spamassassin 或者 sysstat 用户,这些程序需要一个位置去放置 cron 文件,因此,它们被放在 /etc/cron.d 中。

下面的 /etc/cron.d/sysstat 文件包含系统活动报告(SAR)相关的 cron 作业。这些 cron 文件和用户 cron 文件格式相同。

# Run system activity accounting tool every 10 minutes  */10 * * * * root /usr/lib64/sa/sa1 1 1  # Generate a daily summary of process accounting at 23:53  53 23 * * * root /usr/lib64/sa/sa2 -A

sysstat 包安装了 /etc/cron.d/sysstat cron 文件来运行程序生成 SAR。

该 sysstat cron 文件有两行执行任务。***行每十分钟去运行 sa1 程序去收集数据,存储在 /var/log/sa 目录中的一个指定的二进制文件中。然后,在每天晚上的 23:53, sa2 程序运行来创建一个每日汇总。

计划小贴士

我在 crontab 文件中设置的有些时间看上起似乎是随机的,在某种程度上说,确实是这样的。尝试去安排 cron 作业可能是件很具有挑战性的事, 尤其是作业的数量越来越多时。我通常在我的每个电脑上仅有一些任务,它比起我工作用的那些生产和实验环境中的电脑简单多了。

我管理的一个系统有 12 个每天晚上都运行 cron 作业,另外 3、4 个在周末或月初运行。那真是个挑战,因为,如果有太多作业在同一时间运行,尤其是备份和编译系统,会耗尽内存并且几乎填满交换文件空间,这会导致系统性能下降甚至是超负荷,最终什么事情都完不成。我增加了一些内存并改进了如何计划任务。我还删除了一些写的很糟糕、使用大量内存的任务。

crond 服务假设主机计算机 24 小时运行。那意味着如果在一个计划运行的期间关闭计算机,这些计划的任务将不再运行,直到它们计划的下一次运行时间。如果这里有关键的 cron 作业,这可能导致出现问题。 幸运的是,在定期运行的作业上,还有一个其它的选择: anacron。

anacron

anacron 程序执行和 cron 一样的功能,但是它增加了运行被跳过的作业的能力,比如,如果计算机已经关闭或者其它的原因导致无法在一个或多个周期中运行作业。它对笔记本电脑或其它被关闭或进行睡眠模式的电脑来说是非常有用的。

只要电脑一打开并引导成功,anacron 会检查过去是否有计划的作业被错过。如果有,这些作业将立即运行,但是,仅运行一次(而不管它错过了多少次循环运行)。例如,如果一个每周运行的作业在最近三周因为休假而系统关闭都没有运行,它将在你的电脑一启动就立即运行,但是,它仅运行一次,而不是三次。

anacron 程序提供了一些对周期性计划任务很好用的选项。它是安装在你的 /etc/cron.[hourly|daily|weekly|monthly] 目录下的脚本。 根据它们需要的频率去运行。

它是怎么工作的呢?接下来的这些要比前面的简单一些。

crond 服务运行在 /etc/cron.d/0hourly 中指定的 cron 作业。

# Run the hourly jobs SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root 01 * * * * root run-parts /etc/cron.hourly

/etc/cron.d/0hourly 中的内容使位于 /etc/cron.hourly 中的 shell 脚本运行。

在 /etc/cron.d/0hourly 中指定的 cron 作业每小时运行一次 run-parts 程序。

run-parts 程序运行所有的在 /etc/cron.hourly 目录中的脚本。

/etc/cron.hourly 目录包含的 0anacron 脚本,它使用如下的 /etdc/anacrontab 配置文件去运行 anacron 程序。 

# /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # the maximal random delay added to the base delay of the jobs RANDOM_DELAY=45 # the jobs will be started during the following hours only START_HOURS_RANGE=3-22 #period in days   delay in minutes   job-identifier   command 1       5       cron.daily              nice run-parts /etc/cron.daily 7       25      cron.weekly             nice run-parts /etc/cron.weekly @monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

/etc/anacrontab 文件中的内容在合适的时间运行在 cron.[daily|weekly|monthly] 目录中的可执行文件。

anacron 程序每日运行一次位于 /etc/cron.daily 中的作业。它每周运行一次位于 /etc/cron.weekly 中的作业。以及每月运行一次 cron.monthly 中的作业。注意,在每一行指定的延迟时间,它可以帮助避免这些作业与其它 cron 作业重叠。

我在 /usr/local/bin 目录中放置它们,而不是在 cron.X 目录中放置完整的 Bash 程序,这会使我从命令行中运行它们更容易。然后,我在 cron 目录中增加一个符号连接,比如,/etc/cron.daily。

anacron 程序不是设计用于在指定时间运行程序的。而是,用于在一个指定的时间开始,以一定的时间间隔去运行程序,比如,从每天的凌晨 3:00(看上面脚本中的 START_HOURS_RANGE 行)、从周日(每周***天)和这个月的***天。如果任何一个或多个循环错过,anacron 将立即运行这个错过的作业。

更多的关于设置限制

我在我的计算机上使用了很多运行计划任务的方法。所有的这些任务都需要一个 root 权限去运行。在我的经验中,很少有普通用户去需要运行 cron 任务,一种情况是开发人员需要一个 cron 作业去启动一个开发实验室的每日编译。

限制非 root 用户去访问 cron 功能是非常重要的。然而,在一些特殊情况下,用户需要去设置一个任务在预先指定时间运行,而 cron 可以允许他们去那样做。许多用户不理解如何正确地配置 cron 去完成任务,并且他们会出错。这些错误可能是无害的,但是,往往不是这样的,它们可能导致问题。通过设置功能策略,使用户与管理员互相配合,可以使个别的 cron 作业尽可能地不干扰其它的用户和系统功能。

以上是“在Linux中如何使用cron计划任务”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网操作系统频道!

--结束END--

本文标题: 在Linux中如何使用cron计划任务

本文链接: https://lsjlt.com/news/283618.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 在Linux中如何使用cron计划任务
    这篇文章主要介绍在Linux中如何使用cron计划任务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!常见(和非常见)的 cron 用途我使用 cron 服务去安排一些常见的事情,比如,每天凌晨 2:00 发生的定期备...
    99+
    2023-06-16
  • 详解在Linux中怎么使用cron计划任务
    没有时间运行命令?使用 cron 的计划任务意味着你不用熬夜程序也可以运行。 系统管理员(在许多好处中)的挑战之一是在你该睡觉的时候去运行一些任务。例如,一些任务(包括定期循环运行的任务)需要在没有人使用计算机资源的时候...
    99+
    2022-06-04
    Linux cron计划任务 linux 计划任务 cron计划任务
  • 怎么使用cron任务在Linux中计划和自动化任务
    这篇文章主要介绍了怎么使用cron任务在Linux中计划和自动化任务,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。有时,你可能需要定期或以预定的时间间隔执行任务。这些任务包括...
    99+
    2023-06-16
  • 浅谈:linux cron 计划任务常用符号小结
    [root@wx-a ~]# crontab --help crontab: invalid option -- '-' crontab: usage error: unrecognized option...
    99+
    2022-06-04
    浅谈 小结 符号
  • linux cron计划任务常用的符号有哪些
    本篇内容介绍了“linux cron计划任务常用的符号有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! [root@wx-a ...
    99+
    2023-06-09
  • linux中的cron计划任务配置方法是怎样的
    今天就跟大家聊聊有关linux中的cron计划任务配置方法是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. crontab命令选项代码如下:#crontab -u <...
    99+
    2023-06-13
  • Linux下cron调度任务如何使用
    这篇文章主要介绍Linux下cron调度任务如何使用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!cron是一个Unix系统下的配置任务调度的工具。这个工具可以周期性或者是以一个固定间隔运行命令或者脚本。安装 cro...
    99+
    2023-06-28
  • Spring Task如何动态修改任务执行计划cron
    小编给大家分享一下Spring Task如何动态修改任务执行计划cron,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spring Task 动态修改任务执行计划...
    99+
    2023-06-25
  • Linux中如何加入cron任务
    这篇文章给大家分享的是有关Linux中如何加入cron任务的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Cron 是您可以在任何类 Unix 操作系统中找到的最有用的实用程序之一。它用于安排命令在特定时间执行。这...
    99+
    2023-06-28
  • Linux用户自定义at、cron计划任务执行的方法
    linux系统中有两种计划任务,一种是只会执行一次 at 计划任务,一种是可以周期性地执行的 cron 计划任务 at 一次性计划任务 描述 在指定的时间执行特定命令(单次),也称为延时动作任务。 用法 at 时间...
    99+
    2022-06-04
    Linux at cron 计划任务
  • linux如何制作计划任务
    这篇文章给大家分享的是有关linux如何制作计划任务的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一次性计划任务的安排: at :安排作业在某一时刻执行一次(一般都是用它)batch:安排作业在系统负载不重时执行...
    99+
    2023-06-13
  • linux计划任务如何备份
    在Linux系统中,可以使用cron工具来设置计划任务。对于备份任务,可以使用cron来定期执行备份脚本或命令。 以下是一个基本的备...
    99+
    2024-04-02
  • linux中crontab计划任务该如何删除
    本篇文章给大家分享的是有关linux中crontab计划任务该如何删除,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。有时我们需要在Linux系统中创建的crontab计划服务终...
    99+
    2023-06-28
  • 如何在Linux中使用cron命令
    如何在Linux中使用cron命令?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。linux任务调度的工作主要分为以下两类:编辑/etc/crontab 文件配置cron  ...
    99+
    2023-06-12
  • 怎么在linux中删除crontab计划任务
    这篇文章给大家介绍怎么在linux中删除crontab计划任务,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、查看计划任务打开terminal命令窗口输入命令:crontab -l查看已经创建的计划任务二、删除计划任...
    99+
    2023-06-10
  • 如何使用cron来安排任务
    本篇文章给大家分享的是有关如何使用 cron 来安排任务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。导读有时,你可能需要定期或以预定的时间间隔执行任务。这些任务包括备份数据库...
    99+
    2023-06-05
  • linux cron定时任务怎么使用
    在Linux中,Cron是一个用于在预定时间自动执行任务的工具。Cron通过使用Cron表达式来指定任务的执行时间。要使用Cron定时任务,请按照以下步骤进行操作:1. 使用以下命令打开Cron表达式配置文件:```crontab -e...
    99+
    2023-08-11
    linux cron
  • 在Linux中如何使用at和crontab命令在指定时间计划任务服务程序
    这篇文章的内容主要围绕在Linux中如何使用at和crontab命令在指定时间计划任务服务程序进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!经验丰富...
    99+
    2023-06-28
  • linux如何设置周期性计划任务
    要设置周期性计划任务,可以使用Linux中的cron服务。cron是一种定时任务管理工具,可以让用户在指定的时间和日期执行命令或脚本...
    99+
    2023-09-21
    linux
  • linux系统中计划任务介绍
    目录一、定制计划任务二、同步时间三、练习四、安全问题一、定制计划任务 1、atd服务(一次性) 1、atd服务对应的命令------》at 使用at命令时先要进行安装 [root@localhost lianxi]#...
    99+
    2022-06-04
    linux系统计划任务 linux系统定时任务
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作