it-swarm.cn

如何设置Cron作业?

我想安排一个定期运行的任务,并听说Cron是这样做的方法。

如何在Ubuntu中添加Cron作业?

524
Gabriel Solomon

将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是星期日。

你可以阅读更多 这里

641
LassePoulsen

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

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

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

并保存文件。

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

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

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

例如,如果你想以root身份每隔10分钟运行一次,你就会添加这样一行

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

(注意用户添加到该行)

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

更多细节见: https://help.ubuntu.com/community/CronHowto

100
Li Lo

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

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

52
Javier Rivera

我推荐 KDE的任务调度程序(kde-config-cronInstall kde-config-cron 。从那里的任务调度程序模块中的系统设置访问它。

它管理个人和系统Crontabs,创建时间边界的难易程度让我大吃一惊(见下面的截图)。我认为这部分真的被低估了。

enter image description here

25
gertvdijk

KDE任务计划程序不适用于常规Ubuntu。它仅适用于像KUbuntu这样的KDE系统。对于非KDE系统,您更喜欢使用gnome-schedule

$ Sudo apt-get install gnome-schedule

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

11
Antonio

我想设置一个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
9
Craig van Tonder

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

test_cron.sh文件:

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

如果你想在你的脚本中使用环境变量,如路径中的$USER,最好输入精确的路径,bash在执行时不会知道你的变量。

myname是用户名(根组的一部分,我不确定是否需要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)
1
Alexander