如何设置Cron作业?

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

如何在Ubuntu中添加Cron作业?

将shell脚本放在以下文件夹中: /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是星期日。

你可以在这里阅读更多。

如果要运行的作业可以使用与用户相同的权限运行,我建议使用用户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

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

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

我推荐KDE的Task Scheduler( kde-config-cron安装kde-config-cron 。 从那里的任务计划程序模块中的系统设置访问它。

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

在此处输入图像描述

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

 $ sudo apt-get install gnome-schedule 

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

我想设置一个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