如何设置Cron工作?


534

我想安排一个定期运行的任务,并且听说Cron是执行此任务的方法。

如何在Ubuntu中添加Cron作业?

Answers:


655

把一个shell脚本,在这些文件夹中的一个:/etc/cron.daily/etc/cron.hourly/etc/cron.monthly/etc/cron.weekly

如果这些还不够,您可以添加更具体的任务,例如每月两次或每5分钟添加一次。转到终端并输入:

crontab -e

这将打开您的个人crontab(cron配置文件)。该文件的第一行说明了一切!在每一行中,您都可以定义一个要运行的命令及其时间表,当您掌握其格式时,格式非常简单。结构为:

minute hour day-of-month month day-of-week command

对于所有数字,您都可以使用列表,例如5,34,55,在分钟字段中,表示无论定义了什么小时,都将在5点,34点和55点之前运行。

您也可以使用间隔。它们的定义如下:*/20。此示例表示每20秒一次,因此在分钟列中等于0,20,40

因此,要在每个星期一的下午5:30运行命令:

30 17 * * 1 /path/to/command

或每15分钟

*/15 * * * * /path/to/command

请注意,星期几从0-6开始,其中0是星期日。

您可以在这里阅读更多内容。


7
它们是系统范围的,并具有高特权运行。除非迫切需要访问或许可,否则我不会在这里放任何东西。作为经验法则,请尝试在没有功能的情况下进行操作。因此,我很喜欢这个答案好:ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/...
^ h马塞洛·莫拉莱斯

5
@Marcelo Morales,这也将以root用户身份运行给定命令!另一方面,如果您不使用sudo,那么您将创建一个用户crontab,它将以创建它的用户身份运行!
LassePoulsen

4
* / 15 * * * * / path / to / command对我来说非常方便!谢谢!
Andrew Odendaal

18
值得注意的是这些更改是自动应用的,您无需重新启动/重新加载任何内容。
Molomby 2013年

6
另一个方便的技巧是*/15 * * * * /path/to/command,您可以代替@reboot /path/to/command在启动时执行一些操作。
肯尼斯·沃登

102

如果可以使用与您的用户相同的特权来运行您要运行的作业,我建议您使用crontab用户,您可以通过运行EDITOR="gedit" crontab -e(可以使用gedit编辑crontab文件)或简单地crontab -e(使用默认编辑器)进行编辑在一个终端。

例如,如果您想每10分钟运行一次,则添加这样的一行

*/10 * * * * /usr/bin/somedirectory/somecommand

并保存文件。

您可以使用来查看用户crontab的内容crontab -l

要添加以root身份运行的cron作业,您可以通过运行来编辑root的crontab sudo crontab -e

最灵活的方法是使用系统crontab /etc/crontab,您只能使用root特权进行编辑。在此文件中,每个命令的用户将按指定的方式运行,因此您可以以root用户(如果需要该特权级别)或系统上的任何其他用户身份运行命令。

例如,如果您想以root身份每10分钟运行一次,则可以添加如下代码:

*/10 * * * * root /usr/bin/somedirectory/somecommand

(注意将用户添加到该行)

您可以使用来查看系统crontab文件的内容cat /etc/crontab

有关更多详细信息,请访问:https : //help.ubuntu.com/community/CronHowto


1
这是一个甜蜜的互动cron的机械手,这将使你的英语到cron时间crontab.guru
CTS_AE

52

如果您更喜欢使用GUI进行操作,则可以转到软件中心并安装计划任务(或运行sudo apt-get install gnome-schedule)。它将提供强大的GUI以添加cron任务。

请注意,如果使用此方法,默认情况下,任务将以您自己的用户而不是root用户身份执行。这通常是一件好事。



@TankorSmash您可以在这里
M. Becerra


26

我建议使用KDE的Task Scheduler(kde-config-cron 安装kde-config-cron。从任务计划程序”模块中的“ 系统设置”中访问它。

它同时管理个人和系统Crontab,创建时间界限的简便性令我感到惊讶(请参见下面的屏幕截图)。我认为这部分确实被低估了。

在此处输入图片说明


11

KDE Task Scheduler在常规Ubuntu中将无法使用。它仅适用于KUbuntu等KDE系统。对于非KDE系统,您将更喜欢使用gnome-schedule

$ sudo apt-get install gnome-schedule

该应用程序是Dash中的计划任务。


在Ubuntu 16.04中找不到它
SaidbakR

请访问I can't install gnome schedule on Ubuntu 16.04@ askubuntu.com / questions / 785657/…。有一个软件包可以下载@ bugs.launchpad.net / ubuntu / +source / gnome-schedule / +bug / 1576060/…。只是表演$ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb
安东尼奥(Antonio)

10

我想将Cron作业设置为通过bash脚本运行,因此执行脚本将添加cron作业。

我意识到,当您使用:

crontab -e 

然后创建文件:

/var/spool/cron/crontabs/root

其中root是正在运行crontab命令的用户的名称。因此,基于此,至少在14.04中,我们可以执行以下bash命令来创建新的Cron作业:

echo "30 17 * * 1 /path/to/command" > /var/spool/cron/crontabs/root

我们还需要为文件设置正确的所有权:

chown root:root /var/spool/cron/crontabs/root

并设置正确的权限:

chmod 600 /var/spool/cron/crontabs/root

如果在运行时crontab -e列表中已经存在Cron作业,则可以使用以下命令将其追加到列表中:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root

2

test_cron.sh由cron在Ubuntu 18.04上每分钟使用符号链接运行脚本的示例:

test_cron.sh 文件:

#!/bin/bash
echo "System backuped" >> /media/myname/data/backup/backup_tmp.log

如果要像$USER在路径中那样在脚本中使用环境变量,最好键入精确路径,bash在执行时将不知道您的变量。

myname 是用户名(root组的一部分,我不确定是否需要root特权)。

允许用户设置cron作业,如有必要,将创建文件:

sudo nano /etc/cron.allow

root
myname

脚本的路径是 /home/myname/shell/test_cron.sh

我更改了所有者并使其可执行:

sudo chown myname /home/myname/shell/test_cron.sh
chmod +x /home/myname/shell/test_cron.sh

我添加了符号链接:

sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron

myname我添加新任务以test_cron每分钟执行时记录下来。

crontab -e

*/1 * * * * test_cron

要检查命令是否在列表中:

crontab -l

*/1 * * * * test_cron

检查执行

grep -i cron /var/log/syslog

Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.