如何设置 Cron 作业?

Gab*_*mon 593 cron

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

如何在 Ubuntu 中添加 Cron 作业?

Las*_*sen 732

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

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

crontab -e
Run Code Online (Sandbox Code Playgroud)

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

minute hour day-of-month month day-of-week command
Run Code Online (Sandbox Code Playgroud)

对于您可以使用列表的所有数字,例如5,34,55,在分钟字段中将意味着在定义的任何小时后运行 5 点、34 点和 55 点。

您也可以使用间隔。他们是这样定义的:*/20。此示例表示每 20 次,因此在分钟列中它相当于0,20,40.

因此,要在每周一下午 5:30 运行命令:

30 17 * * 1 /path/to/command
Run Code Online (Sandbox Code Playgroud)

或每 15 分钟

*/15 * * * * /path/to/command
Run Code Online (Sandbox Code Playgroud)

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

您可以在此处阅读更多内容。

  • 值得注意的是,这些更改会自动应用,您无需重新启动/重新加载任何内容。 (28认同)
  • 另一个方便的提示是,您可以执行“@reboot /path/to/command”而不是“*/15 * * * * /path/to/command”,以便在启动时执行某些操作。 (9认同)
  • 这些是系统范围的并以高权限运行。除非迫切需要访问或许可,否则我不会在那里放任何东西。根据经验,尝试做没有能力的事情。因此,我更喜欢这个答案:http://ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/2371#2371 (8认同)
  • @Marcelo Morales,它也将以 root 身份运行给定的命令!另一方面,如果您不使用 sudo,那么您将创建一个用户 crontab,它将以创建它的用户身份运行! (5认同)
  • */15 * * * * /path/to/command 对我来说非常方便!谢谢! (4认同)

Li *_* Lo 109

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

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

*/10 * * * * /usr/bin/somedirectory/somecommand
Run Code Online (Sandbox Code Playgroud)

并保存文件。

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

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

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

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

*/10 * * * * root /usr/bin/somedirectory/somecommand
Run Code Online (Sandbox Code Playgroud)

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

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

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


Jav*_*era 54

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

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

  • 显然不适用于 16.04 https://bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060 (3认同)

ger*_*ijk 26

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

它同时管理个人和系统的 Crontab,创建时间界限的轻松让我非常惊讶(见下面的截图)。我认为这部分真的被低估了。

在此处输入图片说明


Ant*_*nio 12

KDE 任务计划程序在常规 Ubuntu 中不起作用。它仅适用于 KDE 系统,如 KUbuntu。对于非 KDE 系统,您更喜欢使用 gnome-schedule

$ sudo apt-get install gnome-schedule
Run Code Online (Sandbox Code Playgroud)

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


Cra*_*der 12

我想设置一个 Cron 作业来运行 bash 脚本,因此执行该脚本会添加一个 cron 作业。

我意识到当你使用:

crontab -e 
Run Code Online (Sandbox Code Playgroud)

然后它创建文件:

/var/spool/cron/crontabs/root

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

echo "30 17 * * 1 /path/to/command" > /var/spool/cron/crontabs/root
Run Code Online (Sandbox Code Playgroud)

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

chown root:root /var/spool/cron/crontabs/root
Run Code Online (Sandbox Code Playgroud)

并设置正确的权限:

chmod 600 /var/spool/cron/crontabs/root
Run Code Online (Sandbox Code Playgroud)

如果运行时crontab -e列表中已经有 Cron 作业,那么您可以使用以下命令附加到列表中:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root
Run Code Online (Sandbox Code Playgroud)


Ale*_*der 5

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

test_cron.sh 文件:

#!/bin/bash
echo "System backuped" >> /media/myname/data/backup/backup_tmp.log
Run Code Online (Sandbox Code Playgroud)

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

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

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

sudo nano /etc/cron.allow

root
myname
Run Code Online (Sandbox Code Playgroud)

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

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

sudo chown myname /home/myname/shell/test_cron.sh
chmod +x /home/myname/shell/test_cron.sh
Run Code Online (Sandbox Code Playgroud)

我添加了符号链接:

sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron
Run Code Online (Sandbox Code Playgroud)

mynametest_cron每分钟添加要执行的新任务时记录。

crontab -e

*/1 * * * * test_cron
Run Code Online (Sandbox Code Playgroud)

要检查列表中的命令:

crontab -l

*/1 * * * * test_cron
Run Code Online (Sandbox Code Playgroud)

检查执行情况

grep -i cron /var/log/syslog

Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
Run Code Online (Sandbox Code Playgroud)