Cron&crontab,解释

卢卡因 上市 不久以前 有关cron和crontab的优秀教程 我认为值得分享。 Cron与Windows中的计划任务等效,只有从终端处理。 那些希望使用可视界面实现相同目标的人可以看到此 另一个项目.

什么是cron?

cron这个名字来自希腊的chronos,意思是“时间”。 在Unix操作系统中,cron是一个常规的后台进程管理器(daemon),它定期运行进程或脚本(例如,每分钟,每天,每周或每月)。 在crontab文件中指定了必须执行的进程以及必须执行的时间。

科莫funciona

cron守护程序从 /etc/rc.d/中 o /etc/init.d中 取决于分布。 Cron在后台运行,每分钟检查一次crontab任务表 / etc / crontab Ø连接 / var / spool / cron 寻找要完成的任务。 作为用户,我们可以添加带有任务的命令或脚本以进行cron自动化某些流程。 例如,这对于自动化系统或良好备份系统的更新很有用。

相关文章:
教程:安装.tar.gz和.tar.bz2软件包

什么是Crontab?

Crontab是一个简单的文本文件,存储了在用户指定的时间要执行的命令列表。 Crontab将检查应该执行脚本或命令的日期和时间,执行权限,并将在后台执行。 每个用户可以拥有自己的crontab文件,实际上 / etc / crontab 假定它是root用户的crontab文件,当普通用户(甚至root)想要生成自己的crontab文件时,我们将使用crontab命令。

Crontab是在多用户系统上以简单系统用户或root用户身份管理cron任务的最简单方法。

使用crontab

我们从一个简单的例子开始。

我们将使系统更新自动化,以消除“我总是必须更新,但我不喜欢那样的东西!”的烦恼。

如何
相关文章:
知道系统的命令(识别硬件和某些软件配置)

首先,我们将编写一个脚本。 此脚本将由cron调用,并将包含我们希望它执行的所有指令,因此在将它包含在cron中之前,有必要以几种情况和几种方式对其进行测试,这是一个简单的更新脚本,如下所示:

#!/ bin / bash#脚本更新示例#选择您的发行版#debian-ubuntu#apt-get更新&apt-get -y升级#fedora #yum -y update #Arch #pacman --noconfirm -Syu

从发行行中删除#。 如果是Ubuntu / Debian,则以apt-get开头。

我们将脚本另存为update.sh(例如,脚本目录位于您的家)。 我们使用以下命令更改所述脚本的执行权限:

chmod a + x〜/脚本/ update.sh

我们运行了几次脚本,以验证一切运行顺利,我们修改了必要的内容(不应包含错误,否则cron只会一遍又一遍地重复一个错误)。 现在将任务添加到我们的crontab中。

将任务添加到crontab

我们使用crontab -e执行crontab的版本,在某些发行版(例如Ubuntu)中,它为我们提供了选择所需文本编辑器的选项,其余的则留给vi。 crontab文件将如下所示。

#mh dom mon dow用户命令

其中:

  • m 对应于脚本执行的分钟,取值范围为0到59
  • h 确切时间,将处理24小时格式,值的范围是0到23是午夜0:12。
  • 礼物 指的是一个月中的某天,例如,如果您想每15天运行一次,则可以指定15
  • 窗口 表示星期几,可以是数字(0到7,其中0和7是星期日)或英语中一天的前3个字母:mon,tue,wed,thu,fri,sat,sun。
  • 用户 定义将执行命令的用户,可以是root用户,也可以是其他用户,只要他们有权执行脚本即可。
  • 命令 指要执行的命令或脚本的绝对路径,例如: /home/usuario/scripts/update.sh,如果它调用脚本,那么它必须是可执行的

为了清楚起见,下面介绍了一些cron任务示例:

15 10 * * *用户/home/user/scripts/update.sh

它将在每天上午10:15运行update.sh脚本

15 22 * * *用户/home/user/scripts/update.sh

它将在每天晚上10:15运行update.sh脚本

00 10 * * 0 root apt-get -y update根用户

它将在每个星期日的上午10:00运行更新

45 10 * * sun root apt-get -y更新

根用户将在每个星期日(星期日)上午10:45运行更新

30 7 20 11 *用户/home/usuario/scripts/update.sh

20月7日30:XNUMX,用户将运行脚本

30 7 11 11 sun用户/home/usuario/scripts/pastel_con_velitas.sh

在11月7日上午30:XNUMX(即星期日),用户将庆祝其sysadmin(即我)

01 * * * *用户/home/usuario/scripts/molestorecordatorio.sh

每天每时每刻的烦人提醒(不建议使用)。

他们仍然可以处理 特殊范围:

30 17 * * 1,2,3,4,5

从星期一到星期五,每天下午5:30。

00 12 1,15,28 **

每个月的第一个,第十五和第12日中午28点(理想的工资单)

如果这令人困惑,则crontab处理 特殊字符串定义这些范围.

@reboot在启动时运行一次
@yearly每年仅运行一次:0 0 1 1 *
@每年与@yearly相同
@monthly每月运行一次,第一天:0 0 1 * *
@weekly每周每周第一个小时的第一分钟。 0 0 * * 0''。
每天@上午12:00 0 0 * * *
@midnight与@daily相同
每小时的第一分钟@hourly:0 * * * *

它的使用非常简单。

@hourly用户/home/user/scripts/molestorecordatorio.sh @monthly用户/home/user/scripts/backup.sh @daily root apt-get更新&& apt-get -y升级

最后但并非最不重要的:

Cron工作管理

crontab文件

用用户定义的文件替换现有的crontab文件

crontab -e命令

编辑用户的crontab文件,每一行将是一个新的crontab任务。

crontab -l

列出所有用户的crontab任务

crontab的-d

删除用户的crontab

crontab -c目录

定义用户的crontab目录(此目录必须具有用户的写入和执行权限)

crontab -u用户

处理另一个用户的crontab的前缀,例如:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u用户

与许多其他工具一样,可以在以下位置更深入,更详细地了解该工具:

谢谢Lucain!