我想安排一个任务定期运行,并听说Cron是做到这一点的方法。
如何在Ubuntu中添加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
.
如果您更喜欢使用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