如何设置Cron作业?

我想定期安排一个任务运行,听说Cron是实现这一目的的方法。

在Ubuntu中如何添加Cron作业?

8个回答

将下面的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代表星期日。
您可以在这里阅读更多信息。

10这些是系统范围的,并且具有高权限运行。除非有迫切需要访问或权限,否则我不会在那里放任何东西。作为一个经验法则,尽量避免使用特权进行操作。因此,我更喜欢这个答案:http://ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/2371#2371 - HMM
6@Marcelo Morales,同时也会以root身份运行给定的命令!如果你不使用sudo,那么将创建一个用户crontab,并且该crontab将以创建它的用户身份运行! - LassePoulsen
29值得注意的是,这些更改是自动应用的,您无需重新启动/重新加载任何内容。 - Molomby
10另一个方便的提示是,你可以使用@reboot /path/to/command来代替*/15 * * * * /path/to/command,以便在启动时执行某个操作。 - Kenneth Worden
如果你想切换到其他编辑器,请运行select-editor命令。 - Ninh Pham
显然,一周的天数从0到7,而且0和7都对应星期日。这是个愚蠢的事情。但事实就是如此。无论如何,没有什么损害。 - Trect

如果您想要运行的工作可以使用与您的用户相同的权限运行,我建议使用用户的定时任务表,您可以通过运行EDITOR="gedit" crontab -e(将使用gedit编辑定时任务表文件)或者简单地在终端中运行crontab -e(将使用默认编辑器)来进行编辑。
例如,如果您想要每10分钟运行一次某个任务,您可以添加如下一行:
*/10 * * * * /usr/bin/somedirectory/somecommand

并保存文件。

您可以使用crontab -l命令查看用户的定时任务表内容。

要添加一个以root身份运行的定时任务,您可以通过运行sudo crontab -e来编辑root的定时任务表。

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

例如,如果您想以root身份每10分钟运行一次某个任务,您可以添加如下一行:

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

(注意行中用户的添加)

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

更多详细信息请参阅:https://help.ubuntu.com/community/CronHowto


1这是一个甜蜜的互动cron操作工具,它可以将英文转换为cron时间。请访问https://crontab.guru。 - CTS_AE

如果您喜欢使用图形用户界面,请转到软件中心并安装“定时任务”(或运行sudo apt-get install gnome-schedule)。它将提供一个强大的GUI来添加cron任务。
请注意,如果您使用此方法,默认情况下,任务将作为您自己的用户而不是根用户执行。这通常是一件好事。

3似乎无法在16.04版本中使用。请参考此链接:https://bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060 - TankorSmash
@TankorSmash 你可以在这里获取它:链接 - M. Becerra
无法在16.04版本满足软件包要求。 - Odysseus Ithaca

我推荐使用KDE的任务计划程序(kde-config-cron 安装kde-config-cron。您可以在“系统设置”中的“任务计划程序”模块中访问它。

它可以管理个人和系统的Crontab,并且创建时间边界的便捷性令我感到非常惊讶(请参见下面的屏幕截图)。我认为这部分真的被低估了。

enter image description here


我想设置一个Cron job来运行一个bash脚本,这样执行脚本就会添加一个cron job。
我意识到当你使用:
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

这更简单:(crontab -l; echo "00 09 * * 1-5 echo hello")| crontab - - NicoKowe

KDE任务调度器在普通的Ubuntu系统中无法工作。它只能在像KUbuntu这样的KDE系统中使用。对于非KDE系统,您可以选择使用gnome-schedule。
$ sudo apt-get install gnome-schedule

该应用程序是“Dash”中的定期任务。

在Ubuntu 16.04中找不到它。 - SaidbakR
请查看链接:https://askubuntu.com/questions/785657/i-cant-install-gnome-schedule-on-ubuntu-16-04/954948,这是关于在Ubuntu 16.04上无法安装gnome schedule的问题。您可以在此链接中找到一个可下载的软件包:https://bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060/comments/23。 只需执行以下命令即可完成安装:$ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb - Antonio

在Ubuntu 18.04上使用符号链接,每分钟由cron运行脚本test_cron.sh的示例:
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)

考虑到您有特定用户的多个cron作业,它们不共享相同的时间表。您只需在/etc/cron.d/下创建文件即可 假设文件名为myjobs,然后只需在该文件中编写所有调度程序,然后运行以下命令。

crontab -u <username> / etc / cron.d / myjobs