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

如何在Ubuntu中添加Cron作业?

#1 楼

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

您可以在此处了解更多信息。

评论


它们是系统范围的,并具有高特权运行。除非迫切需要访问或许可,否则我不会在这里放任何东西。根据经验,尝试在没有功能的情况下进行操作。因此,我更喜欢以下答案:ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job / ...

– H马塞洛·莫拉莱斯
10年8月16日在21:29

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

–拉瑟·波尔森
10年8月16日在21:44

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

–AO_
13年2月21日在11:18

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

– Molomby
2013年12月12日在1:26

另一个方便的技巧是,您可以执行@reboot / path / to / command来代替* / 15 * * * * / path / to / command,以便在启动时执行某些操作。

–肯尼思·沃登(Kenneth Worden)
16年8月12日在7:56

#2 楼

如果您要运行的作业可以使用与您的用户相同的特权运行,我建议您使用crontab用户,您可以通过运行EDITOR="gedit" crontab -e(将使用gedit编辑crontab文件)进行编辑,或者简单地选择crontab -e(将使用默认值)编辑器)在终端中。例如,如果要每10分钟运行一次,则添加这样的一行
并保存文件。

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

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

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

例如,如果您想以root用户身份每10分钟运行一次,则可以添加这样的行



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

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

评论


这是一个很好的交互式cron操纵器,它将为您提供crontab.guru时间的英语。

– CTS_AE
17-10-11在9:32

#3 楼

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

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

评论


显然不适用于16.04 bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060

–TankorSmash
16-10-27在22:55



@TankorSmash你可以在这里得到它

–贝塞拉先生
17年1月31日在22:31



16.04无法满足包装要求

–奥德修斯·伊萨卡(Odysseus Ithaca)
18年3月16日在16:35



#4 楼

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

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



#5 楼

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

$ sudo apt-get install gnome-schedule


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

评论


在Ubuntu 16.04中找不到

–SaidbakR
17年12月6日在17:54

请看看我不能在Ubuntu 16.04 @Askubuntu.com/questions/785657/…上安装gnome计划。有一个软件包可以下载@bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060/…。只需执行$ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb

–安东尼奥
17年12月15日在20:38

#6 楼

我想将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


#7 楼

cron在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组的一部分,我不确定是否具有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)


#8 楼

考虑到您与特定用户有多个cron作业,并且它们不共享相同的计划。您可以在/etc/cron.d/下简单地创建文件
假设文件名为myjobs,然后将所有调度程序写入该文件,然后运行以下命令。

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