Cron&crontab,解释

卢卡因 上市 不久以前 有关cron和crontab的优秀教程 我认为值得分享。 Cron与Windows中的计划任务等效,只有从终端处理。 那些希望使用可视界面实现相同目标的人可以看到此 另一个项目.

什么是cron?

cron这个名字来自希腊的chronos,意思是“时间”。 在Unix操作系统中,cron是一个常规的后台进程管理器(daemon),它定期运行进程或脚本(例如,每分钟,每天,每周或每月)。 在crontab文件中指定了必须执行的进程以及必须执行的时间。

科莫funciona

cron守护程序从 /etc/rc.d/中 o /etc/init.d中 取决于分布。 Cron在后台运行,每分钟检查一次crontab任务表 / etc / crontab Ø连接 / var / spool / cron 寻找要完成的任务。 作为用户,我们可以添加带有任务的命令或脚本以进行cron自动化某些流程。 例如,这对于自动化系统或良好备份系统的更新很有用。

相关文章:
教程:安装.tar.gz和.tar.bz2软件包

什么是Crontab?

Crontab是一个简单的文本文件,存储了在用户指定的时间要执行的命令列表。 Crontab将检查应该执行脚本或命令的日期和时间,执行权限,并将在后台执行。 每个用户可以拥有自己的crontab文件,实际上 / etc / crontab 假定它是root用户的crontab文件,当普通用户(甚至root)想要生成自己的crontab文件时,我们将使用crontab命令。

Crontab是在多用户系统上以简单系统用户或root用户身份管理cron任务的最简单方法。

使用crontab

我们从一个简单的例子开始。

我们将使系统更新自动化,以消除“我总是必须更新,但我不喜欢那样的东西!”的烦恼。

如何
相关文章:
知道系统的命令(识别硬件和某些软件配置)

首先,我们将编写一个脚本。 此脚本将由cron调用,并将包含我们希望它执行的所有指令,因此在将它包含在cron中之前,有必要以几种情况和几种方式对其进行测试,这是一个简单的更新脚本,如下所示:

#!/ bin / bash#脚本更新示例#选择您的发行版#debian-ubuntu#apt-get更新&apt-get -y升级#fedora #yum -y update #Arch #pacman --noconfirm -Syu

从发行行中删除#。 如果是Ubuntu / Debian,则以apt-get开头。

我们将脚本另存为update.sh(例如,脚本目录位于您的家)。 我们使用以下命令更改所述脚本的执行权限:

chmod a + x〜/脚本/ update.sh

我们运行了几次脚本,以验证一切运行顺利,我们修改了必要的内容(不应包含错误,否则cron只会一遍又一遍地重复一个错误)。 现在将任务添加到我们的crontab中。

将任务添加到crontab

我们使用crontab -e执行crontab的版本,在某些发行版(例如Ubuntu)中,它为我们提供了选择所需文本编辑器的选项,其余的则留给vi。 crontab文件将如下所示。

#mh dom mon dow用户命令

其中:

  • m 对应于脚本执行的分钟,取值范围为0到59
  • h 确切时间,将处理24小时格式,值的范围是0到23是午夜0:12。
  • 礼物 指的是一个月中的某天,例如,如果您想每15天运行一次,则可以指定15
  • 窗口 表示星期几,可以是数字(0到7,其中0和7是星期日)或英语中一天的前3个字母:mon,tue,wed,thu,fri,sat,sun。
  • 用户 定义将执行命令的用户,可以是root用户,也可以是其他用户,只要他们有权执行脚本即可。
  • 命令 指要执行的命令或脚本的绝对路径,例如: /home/usuario/scripts/update.sh,如果它调用脚本,那么它必须是可执行的

为了清楚起见,下面介绍了一些cron任务示例:

15 10 * * *用户/home/user/scripts/update.sh

它将在每天上午10:15运行update.sh脚本

15 22 * * *用户/home/user/scripts/update.sh

它将在每天晚上10:15运行update.sh脚本

00 10 * * 0 root apt-get -y update根用户

它将在每个星期日的上午10:00运行更新

45 10 * * sun root apt-get -y更新

根用户将在每个星期日(星期日)上午10:45运行更新

30 7 20 11 *用户/home/usuario/scripts/update.sh

20月7日30:XNUMX,用户将运行脚本

30 7 11 11 sun用户/home/usuario/scripts/pastel_con_velitas.sh

在11月7日上午30:XNUMX(即星期日),用户将庆祝其sysadmin(即我)

01 * * * *用户/home/usuario/scripts/molestorecordatorio.sh

每天每时每刻的烦人提醒(不建议使用)。

他们仍然可以处理 特殊范围:

30 17 * * 1,2,3,4,5

从星期一到星期五,每天下午5:30。

00 12 1,15,28 **

每个月的第一个,第十五和第12日中午28点(理想的工资单)

如果这令人困惑,则crontab处理 特殊字符串定义这些范围.

@reboot在启动时运行一次
@yearly每年仅运行一次:0 0 1 1 *
@每年与@yearly相同
@monthly每月运行一次,第一天:0 0 1 * *
@weekly每周每周第一个小时的第一分钟。 0 0 * * 0''。
每天@上午12:00 0 0 * * *
@midnight与@daily相同
每小时的第一分钟@hourly:0 * * * *

它的使用非常简单。

@hourly用户/home/user/scripts/molestorecordatorio.sh @monthly用户/home/user/scripts/backup.sh @daily root apt-get更新&& apt-get -y升级

最后但并非最不重要的:

Cron工作管理

crontab文件

用用户定义的文件替换现有的crontab文件

crontab -e命令

编辑用户的crontab文件,每一行将是一个新的crontab任务。

crontab -l

列出所有用户的crontab任务

crontab的-d

删除用户的crontab

crontab -c目录

定义用户的crontab目录(此目录必须具有用户的写入和执行权限)

crontab -u用户

处理另一个用户的crontab的前缀,例如:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u用户

与许多其他工具一样,可以在以下位置更深入,更详细地了解该工具:

谢谢Lucain!

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   阿尔瓦罗·奥尔蒂斯(Alvaro Ortiz)

    呃...有点混乱。

  2.   补药

    * /每30分钟就会丢失30个(在分钟字段中)...

    1.    erm3nda

      我只是要对此发表评论,直到我决定查看评论😀
      此修饰符是非常重要的信息,也非常有用。

      1.    奇卡

        您好!
        现在,我每45分钟测试一次配置。

        * / 45 * * * *,并且该指令在每小时和每小时的45分钟执行一次。 也就是说:

        它在3:45,然后4:00、4:45,然后5:00、5:45、6:00、6:45等运行。

        我有什么问题吗?我该怎么做,以至于每45分钟一次,或者每小时至少45分钟一次。

    2.    奇卡

      您好!
      现在,我每45分钟测试一次配置。

      * / 45 * * * *,并且该指令在每小时和每小时的45分钟执行一次。 也就是说:

      它在3:45,然后4:00、4:45,然后5:00、5:45、6:00、6:45等运行。

      我有什么问题吗?我该怎么做,以至于每45分钟一次,或者每小时至少45分钟一次。

  3.   松弛

    您好超级有用的信息,以阐明cron的工作方式。
    字节

  4.   松弛

    为*

  5.   猎手

    太好了,谢谢您澄清了cron的工作原理。

  6.   雅各

    据我了解,这条线将在晚上10:15执行,如果我错了,请纠正我
    好吧,它说上午10:15
    15 22 * * *用户/home/user/scripts/update.sh

  7.   奥古斯丁

    你好! 非常好的信息。
    要每半小时执行一个脚本,应添加到CronTab的行应为:“ 30 * * * * root Scrip.sh”对吗? 非常感谢!

  8.   让我们使用linux

    否。如果我没记错的话,您必须输入/ 30 * * * * root Scrip.sh。
    也就是说,在/之前加上/。
    干杯! 保罗

  9.   乔纳森

    您好,我喜欢您的帖子,它很完整,但是我想问您一些事情。
    我在使用此命令和“ at”这样的命令时遇到麻烦。

    我想在特定时间运行脚本并放入

    在-f /home/mi_user/Desk/script.sh 18:08示例

    并且脚本不在屏幕上执行,即在终端中执行,是否在后台执行?

    对于cron来说,同样的事情发生在我身上,我使用“ crontab -e”编辑crontab文件

    最后,我添加以下行:

    46 19 my_user /home/mi_user/Desk/script.sh

    它什么也不做,也不显示脚本。

    有什么建议吗? 非常感谢您,给您带来的不便深表歉意

    1.    让我们使用linux

      为了显示终端,您可能必须运行终端并将脚本作为参数传递。

      例如:

      lxterminal -e“ my_user /home/mi_user/Desktop/script.sh”

      使用的参数可能会因您使用的终端仿真器而异。

      我希望它能起作用。

      拥抱! 保罗

  10.   帕特雷卡斯

    感谢您的贡献。

    10点 !!

    salu2!

  11.   鲁道夫

    非常感谢您,这对我弄清楚了很多事情,非常感谢,对于更多的细节或疑问,我将在MAN PAGE上再次打个招呼。

  12.   贾希尔

    男人非常感谢您,我一直在阅读和测试示例。 非常感谢...这是可以理解的。 问候

  13.   乔凡尼

    我使用了ubuntu Server 12.04.2 LTS,并使用了我拥有的crontab版本来删除用户作业列表,即crontab -r(和-l,如本手册所说)。 当然,这是版本问题。

    另一方面,我曾经只运行crontab,这种让我创建了自己的执行文件,但这不是正在执行的文件。 运行的是/ etc / crontab中的一个。 也许有人会使用该评论。

    PS(我使用locate和whereis crontab进行搜索,但是它仅返回上述地址和另一个加密的文件,因此,如果执行的文件是/ etc / crontab中的文件,但是当我执行crontab -e命令时,我的出现了我定义的所有作业)此文件存储在哪里? 问候。 我总是使用root登录。

  14.   塞巴斯蒂安

    优秀,非常有用!

  15.   MMM

    您好,我想这样做…………«15 10 * * * root ifdown eth0»

    那就是说,在某个时间网卡被关闭了…………好吧,我把它放在crontab中了,它没用……..怎么了?

    Saludosÿ谢谢

  16.   米格尔

    您没有在标题“将任务添加到crontab”中定义“ mon”

    这篇文章仍然不错,cron非常有用。

  17.   汽车

    那好帖子有多酷,问我
    如果我想跟踪任务执行留下的记录,我在哪里可以看到它?

    决定我要查看此文件过去执行的操作的历史记录,并且要查看谁修改了该文件以及日期

    谢谢

  18.   奥斯卡

    我想检查这个的修改历史

    我该怎么做

    谢谢

  19.   安德烈斯·莱多(Andres Ledo)

    早上好,

    我认为在ubuntu脚本中您犯了一个错误,您将ap-get -y升级而不是apt-get -y升级。 (您留下了t)。

    问候。

    1.    让我们使用linux

      也是如此谢谢!
      拥抱! 保罗

  20.   加布里埃尔

    我想知道如何创建一个cron文件,以便能够指定每次执行的时间,目录等。

  21.   瓦伦丁

    感谢您澄清cron的操作和基本命令,现在请您娱乐一下。

  22.   砂光机

    每当我寻找有关Gnu / Linux的任何主题的信息时,我都会四处寻找在这个伟大社区中始终有90%的案例是最好的教程,我认为从现在开始,我将在这里和其他地方开始。

    问候

    1.    让我们使用linux

      谢谢桑德! 一个拥抱! 保罗

  23.   达约

    dom =每月的一天
    道琼斯指数=星期几
    关联起来会更容易

  24.   复活节的

    非常感谢,非常完整,并且解释清楚。

  25.   马克西利亚

    这是我的操作系统老师给我们的东西,我什么都没做,现在我明白了为什么课堂如此糟糕..-嗯,这和家庭作业xD一样

  26.   马塞洛

    估计,

    查询,可以限制任务的持续时间吗?
    例如,我有一个任务每5分钟重复一次,如果该任务仍处于活动状态,请重复执行该任务,然后杀死它并再次运行。

    谢谢,
    马塞洛-

    1.    让我们使用linux

      你好,马塞洛!

      我认为如果您在我们的问答服务中提出这个问题会更好 询问供应商 DesdeLinux 这样整个社区都可以帮助您解决问题。

      拥抱,巴勃罗。

  27.   aj

    好帖子。
    每个终端将任务添加到crontab的命令是什么(无需输入crontab并使用'crontab -e'手动添加任务,或将crontab替换为带有'crontab文件'的另一个crontab)。
    这个想法是创建一个外部脚本以将任务添加到crontab
    谢谢

    1.    大卫

      在我看来,您可以使用“ echo”来添加“ |”。 猫>>'cronotab路径(/ etc / cronotab)'«

  28.   拉斐尔·维拉(Rafael Vera)

    表达式每3天将如何准确运行一次

  29.   何塞·安东尼奥

    嘿。

    我在执行cron作业时遇到问题。

    我使用cronta -e运行以下任务:

    01 * * * * root /home/user/script/myfile.sh

    但是任务没有完成。 我检查了myfile.sh是否具有执行权限,并且执行它的用户是root。

    我在/ etc / crontab中运行相同的任务,重新启动服务后,它对我也不起作用。
    myfile.sh的内容是用于更新数据库的命令,如果我在控制台中运行它,它将起作用。
    知道可能是什么问题吗?

    1.    Fredd

      数据库用户可能没有所有权限,因此您首先必须从数据库引擎中导出环境变量。
      例如,在db2中,此行将转到脚本的开头
      。 /主页/ db2inst1 / sqllib / db2profile

      另一个原因可能是脚本需要连接到数据库,在脚本内建立到数据库的连接

  30.   LA3

    我不知道我必须重新启动crond,我已经为此战斗了一段时间

  31.   kenia

    他们将知道如何指示任务在每个月的每个月末在指定的时间运行..详细信息是我无法知道我需要花费每个月的最后一天.. ??? 我不得不一一写下它们,但是当二月底到来时,这对我来说是很复杂的。

  32.   耶稣

    美好的一天!!

    如何停止crontab中正在执行的进程?

  33.   耶稣

    流程*…………

  34.   朱莉安娜

    可以帮我吗? 由minha撰写的eu tenho um脚本无法正常运行crontab! 拒绝所有许可,没有私有的cron或可以执行它的用户-几乎什么也没有发生! 我想知道您是否可以帮助我,其他一些事情也无济于事! l

  35.   th

    您如何安排任务在该月的最后一天(天:31-30-28)运行?

  36.   Tfercho

    如您所知,su命令用于在控制台中更改用户。 如果我这样使用su命令:“您的用户”更改用户但没有正确设置“ user”,那么如果我以以下方式运行su:“ su-user”,请通过加载用户设置更改用户。 使用cron可以指示用户,但是如何加载该用户的设置?

  37.   罗伯

    如果我想停止它?

  38.   REGI

    你好,
    我不知道自己在做什么错,但是我按照这些步骤进行操作,但没有执行任何操作。 我试过了:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * *根usr / bin / test.sh

    一无所有。 它不执行任何操作。 我已经重新启动,一切。

  39.   费格斯

    非常感谢