无人值守升级如何开始以及如何修改其时间表?

无人值守升级如何开始以及如何修改其时间表?

我想知道谁在我的 debian-jessie 中开始无人值守升级:

  1. 我的手册页

    DESCRIPTION
       This program can download and install security  upgrades  automatically
       and  unattended,  taking care to only install packages from the config‐
       ured APT source, and checking for dpkg prompts about configuration file
       changes. All output is logged to /var/log/unattended-upgrades.log.
       This  script  is  the backend for the APT::Periodic::Unattended-Upgrade
       option and designed to be run from cron (e.g. via /etc/cron.daily/apt).
    
  2. 但我的 crontab 没有通过 crontab 命令显示任何内容:

    @stefano:/etc/cron.daily$ crontab -l
    no crontab for stefano
    # crontab -l
    no crontab for root
    
  3. 但我的无人值守升级工作正常!(我的无人值守升级日志文件):

    2017-02-05 12:42:42,835 INFO Initial blacklisted packages: 
    2017-02-05 12:42:42,866 INFO Initial whitelisted packages: 
    2017-02-05 12:42:42,868 INFO Starting unattended upgrades script
    2017-02-05 12:42:42,870 INFO Allowed origins are: ['o=Debian,n=jessie', 'o=Debian,n=jessie-updates', 'o=Debian,n=jessie-backports', 'origin=Debian,codename=jessie,label=Debian-Security']
    2017-02-05 12:43:15,848 INFO No packages found that can be upgraded unattended

如果我想改变我的日程安排,我必须在哪里检查/修改?

答案1

对于 Debian 9(stretch)和 Debian 10(buster),无人值守升级的时间表由两个步骤确定:

  1. 系统调度程序(例如 systemd 计时器或 cron/anacron),以及
  2. APT::周期性间隔。

其中一个的较低频率会阻碍另一个的较高频率,因此请确保设置正确两个都脚步。

1.系统调度程序

该过程由以下两个 systemd 计时器启动:

  • apt-daily.timer更新软件包列表 ( apt-get update),以及
  • apt-daily-upgrade.timer安装升级 ( unattended-upgrade)。

(anacron 作业/etc/cron.daily/apt-compat仍然存在,但如果检测到 systemd 则退出。如果您不使用 systemd,请参阅其他答案或有关更改计划的 anacron 文档。)

要修改您的更新计划:

$ sudo systemctl edit apt-daily.timer

这创建了/etc/systemd/system/apt-daily.timer.d/override.conf.填写如下,例如:

[Timer]
OnCalendar=
OnCalendar=01:00
RandomizedDelaySec=15m

升级时间表相同:

$ sudo systemctl edit apt-daily-upgrade.timer

[Timer]
OnCalendar=
OnCalendar=01:30
RandomizedDelaySec=0

检查你的工作:

$ systemctl cat apt-daily{,-upgrade}.timer
$ systemctl --all list-timers apt-daily{,-upgrade}.timer

(部分摘自Debian Wiki:无人值守升级.)

2. APT::周期性间隔

无论您使用 systemd 计时器还是 anacron 作业作为系统调度程序,最终都会调用相同的脚本。该脚本对是否需要再次运行做出新的第二次决定,但现在基于 APT::Periodic 中设置的时间间隔。您通常应该在以下位置找到这些设置/etc/apt/apt.conf.d/20auto-upgrades

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

我一直认为"1"这里的值只是意味着 True 或 On,但实际上,它是运行之间的最小间隔,以天表示。如果脚本确定自上次执行请求的操作以来已经过去了更少的时间,它将简单地不是执行该操作,无论系统调度程序是否要求它。

对于 1.5 以上的 apt 版本(Debian 10 buster),您可以将 APT::Periodic 值从 更改"1""always"。您执行此操作一次,从那时起,您只需与系统调度程序(systemd 计时器或 anacron)交互即可更改调度。

有关上述内容的更多详细信息,或者如果您想安排无人值守升级每天运行多次,请在此处查看我的答案:如何运行无人值守升级,不是每天而是每隔几个小时

答案2

如果我想改变我的日程安排,我必须在哪里检查/修改?

配置unattended-upgrades为自动应用。

要验证它,请检查/etc/apt/apt.conf.d/20auto-upgrades文件,您将得到:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

要修改它,您应该运行以下命令:

dpkg-reconfigure -plow unattended-upgrades 

示例输出:

 Applying updates on a frequent basis is an important part of keeping 
 systems secure. By default, updates need to be applied manually using
 package management tools.

 Alternatively, you can choose to have this system automatically download 
 and install security updates.                                                                   

     Automatically download and install stable updates?

选择NO停止自动更新

再次验证/etc/apt/apt.conf.d/20auto-upgrades,你应该得到:

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";

编辑

要运行unattended-upgrades每周编辑,请执行/etc/apt/apt.conf.d/20auto-upgrades以下操作:

APT::Periodic::Update-Package-Lists "7";
APT::Periodic::Unattended-Upgrade "1";

详细的例子可以在 Debian-Wiki 上找到:通过 /etc/apt/apt.conf.d/02periodic 自动调用

APT::Periodic::Update-Package-Lists

此选项允许您指定刷新包列表的频率(以天为单位)。 apticron 用户可以不使用此变量,因为 apticron 已经执行此任务。

答案3

/etc/crontabrun-parts /etc/cron.daily一行引用包含/etc/cron.daily/apt-compat执行文件的文件夹exec /usr/lib/apt/apt.systemd.daily

答案4

anacron启动unattended-upgrades和其他系统 cron 作业。

cat /etc/anacrontab 
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root

# These replace cron's entries
1   5   cron.daily  run-parts --report /etc/cron.daily
7   10  cron.weekly run-parts --report /etc/cron.weekly
@monthly    15  cron.monthly    run-parts --report /etc/cron.monthly

相关内容