当前位置: 首页>>技术问答>>正文


我如何设置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将表示在过去的34小时和55小时过去的时间内运行。

您也可以使用时间间隔,它们是这样定义的:*/20这个例子意味着每隔20分钟,如果在分钟列中,这将等于0,20,40所以要在下午5点30分的每个星期一运行一个命令:

30 17 * * 1 /path/to/command

或每15分钟一次

*/15 * * * * /path/to/command

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

您可以阅读更多here

次佳解决方法

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

例如,如果您想每10分钟运行一次,请添加这样的一行

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

并保存该文件。

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

最灵活的方法是使用系统crontab,您可以通过在终端中运行sudo crontab -e来进行编辑。这将允许您以root用户身份运行您的命令(以防您需要该级别的权限)或系统上的任何其他用户。

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

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

并保存该文件(注意用户添加到该行)

您可以使用sudo crontab -l查看系统crontab文件的内容。

更多细节请参阅:https://help.ubuntu.com/community/CronHowto

第三种解决方法

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

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

第四种方法

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

cron,ubuntu

它同时管理个人和系统Crontabs,并且创建时间界限的方便性让我大吃一惊(参见下面的截图)。我认为这部分真的被低估了。

cron,ubuntu

第五种方法

KDE Task Scheduler在常规的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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/38.html,未经允许,请勿转载。