如何设置Cron工作?

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

如何在Ubuntu中添加Cron作业?

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

你可以阅读更多 这里.

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

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

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

并保存文件。

你可以看到用户crontab的内容与 crontab -l.

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

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

例如,如果您想以root身份每10分钟运行一次,则可以添加如下行

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

(注意用户添加到行)

你可以看到系统crontab文件的内容与 cat /etc/crontab.

更多详情,请浏览: https://help.ubuntu.com/community/CronHowto

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

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

我推荐 KDE的任务计划程序(kde-config-cron) . 从 系统设置任务计划程序 模块在那里。

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

KDE任务调度程序将无法在常规Ubuntu中工作。 它只适用于像KUbuntu这样的KDE系统。 对于非KDE系统,您更喜欢使用gnome-schedule

$ sudo apt-get install gnome-schedule

该应用程序是仪表板中的计划任务。

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

运行脚本示例 test_cron.sh 通过cron每分钟在Ubuntu18.04使用符号链接:

test_cron.sh 档案:

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

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

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

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

sudo nano /etc/cron.allowrootmyname

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

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

sudo chown myname /home/myname/shell/test_cron.shchmod +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/syslogNov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)

考虑到你有 多个cron工作 与特定的用户,他们不共享相同的时间表。 你可以简单地创建文件 /etc/cron.d/让我们说文件名是 myjobs 然后只需在该文件中写入所有调度程序,然后运行以下命令。

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