如何安排 yum 自动更新仅在夜间运行?

Ken*_*hip 7 yum cron rhel centos

我想设置 yum 以使用 yum-cron 自动更新系统。但是我的互联网连接非常有限,我不希望更新过程占用可用的互联网的一小部分,并使网络上的每个人的计算机使用都变得悲惨。

如何设置 yum 自动检查和下载更新,但仅限于凌晨 2 点到 6 点之间?

mau*_*wns 7

好吧,如果是我,我会设置root一个每天凌晨 2 点开始的 cron 作业(为)。像这样:

0 2 * * * /bin/yum -y update
Run Code Online (Sandbox Code Playgroud)

它几乎是可以得到的KISS!


iga*_*gal 5

这是一个简短的答案。以 root 用户身份运行以下命令:

cat <<HEREDOC > /etc/crontab.d/update-yum.crontab
SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
MAILTO=root
HOME=/
0 2 * * *  yum -y update
HEREDOC
Run Code Online (Sandbox Code Playgroud)

详细说明如下。


有几个用于在 Unix 系统上运行预定作业的实用程序:

该cron实用程序是用于执行计划任务的事实上的标准 Unix 实用程序。的一个缺点cron是,如果系统由于某种原因停机,则可能无法执行任务

该anacron实用程序是为主机系统可能无法持续运行的用例而创建的:

anacron是一个执行周期性命令调度的计算机程序,传统上由 cron 完成,但不假设系统连续运行。

该fcron实用程序是一个较新的版本,也旨在处理这种情况:

fcron是一个计算机程序 [...] 执行定期命令调度。[fcron] 不假设系统是连续运行的,可以在不一直运行或不定时运行的系统中运行。它旨在用单个集成程序替换 Vixie-cron 和 Anacron,提供原始 Cron 守护程序所缺少的许多功能。

该hcron实用程序是一个功能更加丰富的替代方案:

hcron [带来了一些新的东西] 以许多非常有用和实用的方式。例如:

  • 事件单独存储,每个都存储在自己的文件中,而不是全部存储在单个文件中
  • 事件在文件系统中分层组织,而不是作为单个文件中的表
  • 事件已命名且可引用
  • 事件被定义为多个键=值设置,而不是单行上的有序列
  • hcron 是面向网络的而不是面向系统的
  • 支持模板事件以减少和重用设置
  • 如果无法产生事件,则支持故障转移事件
  • 支持设置和使用变量

如果您不需要任何其他变体的附加功能,那么最简单的使用方法是cron. 典型的工作流程cron是为给定的任务创建一个所谓的 cron 作业,它由一个要运行的命令和一个指定何时运行它的模式组成。时间模式的语法如下所示:

# ?????????????? minute (0 - 59)
# ? ?????????????? hour (0 - 23)
# ? ? ?????????????? day of month (1 - 31)
# ? ? ? ?????????????? month (1 - 12)
# ? ? ? ? ?????????????? day of week (0 - 6) (Sunday to Saturday;
# ? ? ? ? ?                                       7 is also Sunday on some systems)
# ? ? ? ? ?
# ? ? ? ? ?
# * * * * *  command to execute
Run Code Online (Sandbox Code Playgroud)

cron 守护进程每分钟运行一次,并检查所有活动的 cron 作业以查看是否有任何作业具有与当前时间匹配的模式。例如,要在凌晨 2:00 运行作业,您可能希望分钟值为 0,小时值为 2,并且月中的某天、月份和星期几的值不受限制。这将表示如下:

0 2 * * * command
Run Code Online (Sandbox Code Playgroud)

语法可能需要一点时间来适应,所以这里有一个基于 Web 的实用程序,它将帮助您生成 cron 作业表达式:

这是您可能会发现有用的另一个基于 Web 的工具:

它反过来——它允许您输入时间模式并以英文显示。

有几种不同的方式来部署 cron 作业。有一个主 crontab 文件和几个子目录,/etc/用于系统 cron 作业:

/etc/crontab
/etc/cron.d
/etc/cron.daily
/etc/cron.deny
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly
Run Code Online (Sandbox Code Playgroud)

例如,有关这方面的更多信息,请参阅 CentOS 部署指南中的相关部分:

最简单的方法可能是将 crontab 文件添加到/etc/crontab.d目录中,例如

# ?????????????? minute (0 - 59)
# ? ?????????????? hour (0 - 23)
# ? ? ?????????????? day of month (1 - 31)
# ? ? ? ?????????????? month (1 - 12)
# ? ? ? ? ?????????????? day of week (0 - 6) (Sunday to Saturday;
# ? ? ? ? ?                                       7 is also Sunday on some systems)
# ? ? ? ? ?
# ? ? ? ? ?
# * * * * *  command to execute
Run Code Online (Sandbox Code Playgroud)

您可能希望将 MAILTO 变量设置为您首选的管理电子邮件地址,以便在作业失败时通知您。

您还应该意识到,cronjobs 在与您的用户不同的环境中运行,这是一个常见的问题和沮丧的根源。例如,请参阅以下帖子: