[gelöst] unattended-upgrade: Ausführzeiten

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Frink
Beiträge: 70
Registriert: 25.11.2017 15:57:49
Lizenz eigener Beiträge: GNU Free Documentation License

[gelöst] unattended-upgrade: Ausführzeiten

Beitrag von Frink » 15.02.2018 15:46:16

Hey,

wie steuert man die Ausführzeiten von unattended-upgrade. Hier steht, dass der Eintrag

Code: Alles auswählen

APT::Periodic::RandomSleep "0";
in der Datei /etc/apt/apt.conf.d/10periodic festlegt, wie lange zufällig nach dem Einschalten des Rechners gewartet werden soll, bis unattended-upgrade ausgeführt wird. Die Frage wäre hier: Passiert das jedesmal wenn der Rechner eingeschaltet wird (mehrmals am Tag) und was ist wenn der Rechner mehrere Tage durchläuft?

Dann finden sich Quellen, in denen gesagt wird, dass die Datei /lib/systemd/system/apt-daily.timer, die bei mir so aussieht

Code: Alles auswählen

[Unit]
Description=Daily apt download activities

[Timer]
OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target
verantwortlich ist, wann unattended-upgrade ausgeführt wird. Im gegebenen Fall dann täglich um 6 und 18 Uhr mit einer zufälligen 12h (!) Verzögerung. Hier wäre auch die Frage, was ist wenn der Rechner um 7 Uhr eingeschaltet wird, wird dann das 6 Uhr Update nicht mehr ausgeführt?

Und dann wird hier noch gesagt, dass die Datei /lib/systemd/system/apt-daily.timer bei einem Update von unattended-upgrades überschrieben wird und man deshalb die Datei /etc/systemd/system/apt-daily.timer konfigurieren soll.

Was ist denn nun der richtige Weg?

Danke & Viele Grüße,

Frink
Zuletzt geändert von Frink am 16.02.2018 10:40:06, insgesamt 1-mal geändert.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: unattended-upgrade: Ausführzeiten

Beitrag von rendegast » 15.02.2018 16:18:56

Unter systemd wird das Arbeitsskript (früher /etc/cron.daily/apt) durch den timer angesteuert.
Wichtigstes Argument dafür ist die Entlastung der Server.
Das aktuelle Skript in /etc/cron.daily/ hat eine entsprechende Abbruchbedingung,
es arbeitet unter sysv wie gewohnt getriggert durch cron.daily resp. anacron.

APT::Periodic::RandomSleep "0";
in der Datei /etc/apt/apt.conf.d/10periodic festlegt, wie lange zufällig nach dem Einschalten des Rechners gewartet werden soll, bis unattended-upgrade ausgeführt wird.
RandomSleep setzt den Zeitrahmen für eine zufällige Pause des Arbeitsskriptes /etc/cron.daily/apt(..).
Problem dabei ist, daß (durch den Namen normalerweise das erste Skript) ALLE cron.daily/-Jobs entsprechend warten müssen.
... nach dem Einschalten des Rechners ...
Hier kommt wohl eine Verwirrung mit Debiananacron und dessen Verzögerung bei Rechnerstart für das Nachholen von cron..../-jobs. Diese Verzögerung wird in /etc/anacrontab vorgegeben (default daily=5min, weekly=10Min, monthly=15Min).
anacron setzt die Werte von cron für die cron..../-Jobs außer Kraft (/etc/crontab),
es wird eine Zeit in /etc/cron.d/anacron für die regelmäßigen Jobs verwendet.



... dass die Datei /lib/systemd/system/apt-daily.timer bei einem Update von unattended-upgrades überschrieben wird und man deshalb die Datei /etc/systemd/system/apt-daily.timer konfigurieren soll.
-> Bei einem Update von Debianapt.
Es dürfte wohl die modifizierte Datei in /lib/systemd/ erhalten bleiben, die mitgebrachte des Pakets liegt dann wohl als Kopie mit Endung "dpkg-dist" daneben.
Kein Beinbruch, aber unschön.
Das kann halt durch eine gleichnamige Kopie in /etc/systemd/ vermieden werden.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Frink
Beiträge: 70
Registriert: 25.11.2017 15:57:49
Lizenz eigener Beiträge: GNU Free Documentation License

Re: unattended-upgrade: Ausführzeiten

Beitrag von Frink » 15.02.2018 17:19:03

Also ehrlich gesagt, bin ich immer noch etwas verwirrt.
rendegast hat geschrieben: ↑ zum Beitrag ↑
15.02.2018 16:18:56
Unter systemd wird das Arbeitsskript (früher /etc/cron.daily/apt) durch den timer angesteuert.
Wichtigstes Argument dafür ist die Entlastung der Server.
Das aktuelle Skript in /etc/cron.daily/ hat eine entsprechende Abbruchbedingung,
es arbeitet unter sysv wie gewohnt getriggert durch cron.daily resp. anacron.
APT::Periodic::RandomSleep "0";
in der Datei /etc/apt/apt.conf.d/10periodic festlegt, wie lange zufällig nach dem Einschalten des Rechners gewartet werden soll, bis unattended-upgrade ausgeführt wird.
RandomSleep setzt den Zeitrahmen für eine zufällige Pause des Arbeitsskriptes /etc/cron.daily/apt(..).
Problem dabei ist, daß (durch den Namen normalerweise das erste Skript) ALLE cron.daily/-Jobs entsprechend warten müssen.
... nach dem Einschalten des Rechners ...
Hier kommt wohl eine Verwirrung mit Debiananacron und dessen Verzögerung bei Rechnerstart für das Nachholen von cron..../-jobs. Diese Verzögerung wird in /etc/anacrontab vorgegeben (default daily=5min, weekly=10Min, monthly=15Min).
anacron setzt die Werte von cron für die cron..../-Jobs außer Kraft (/etc/crontab),
es wird eine Zeit in /etc/cron.d/anacron für die regelmäßigen Jobs verwendet.
Ich habe unter /etc/cron.daily/ nur das Skript apt-compat, mit folgendem Inhalt

Code: Alles auswählen

#!/bin/sh

set -e

# Systemd systems use a systemd timer unit which is preferable to
# run. We want to randomize the apt update and unattended-upgrade
# runs as much as possible to avoid hitting the mirrors all at the
# same time. The systemd time is better at this than the fixed
# cron.daily time
if [ -d /run/systemd/system ]; then
    exit 0
fi

check_power()
{
    # laptop check, on_ac_power returns:
    #       0 (true)    System is on main power
    #       1 (false)   System is not on main power
    #       255 (false) Power status could not be determined
    # Desktop systems always return 255 it seems
    if which on_ac_power >/dev/null 2>&1; then
        if on_ac_power; then
            :
        elif [ $? -eq 1 ]; then
            return 1
        fi
    fi
    return 0
}

# sleep for a random interval of time (default 30min)
# (some code taken from cron-apt, thanks)
random_sleep()
{
    RandomSleep=1800
    eval $(apt-config shell RandomSleep APT::Periodic::RandomSleep)
    if [ $RandomSleep -eq 0 ]; then
        return
    fi
    if [ -z "$RANDOM" ] ; then
        # A fix for shells that do not have this bash feature.
        RANDOM=$(( $(dd if=/dev/urandom bs=2 count=1 2> /dev/null | cksum | cut -d' ' -f1) % 32767 ))
    fi
    TIME=$(($RANDOM % $RandomSleep))
    sleep $TIME
}

# delay the job execution by a random amount of time
random_sleep

# ensure we don't do this on battery
check_power || exit 0

# run daily job
exec /usr/lib/apt/apt.systemd.daily
Da das Verzeichnis /run/systemd/system bei mir existiert, sollte das Skript allerdings gar nichts machen (???) (s. Zeile 10-12). Aber mal angenommen, das Verzeichnis existiert nicht, dann wird das Skript täglich von anacron ausgeführt, es wird eine zufällige Verzögerung von RandomSleep ausgeführt, bevor exec /usr/lib/apt/apt.systemd.daily aufgerufen wird, was wiederum ein etwas komplexeres Shell-Skript ist, in dem gesagt, wird

Code: Alles auswählen

# Create /etc/apt/apt.conf.d/10periodic file to set your preference.
Wann kommt jetzt also die Datei /lib/systemd/system/apt-daily.timer ins Spiel?

Danke & Viele Grüße,

Frink

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: unattended-upgrade: Ausführzeiten

Beitrag von rendegast » 15.02.2018 18:22:35

Da das Verzeichnis /run/systemd/system bei mir existiert, sollte das Skript allerdings gar nichts machen (???) (s. Zeile 10-12).
Nicht "(???)", sondern "(!!!)".
Richtig beobachtet, das ist die von mit erwähnte Abbruchbedingung.
cron.daily/apt-compat ist nur noch ein kleiner Rest vom früheren cron.daily/apt,
der Hauptteil steckt im apt.systemd.daily-Skript.


Wann kommt jetzt also die Datei /lib/systemd/system/apt-daily.timer ins Spiel?
Wenn Du apt-daily.service / apt-daily-upgrade.service aktivierst resp. nicht deaktivierst.




Das von mir angesprochene Pausieren für cron.daily/-Jobs (bis zu 1800sec) bei Ausführung von apt-compat durch cron / anacron unter sysv kann durch zBsp. RandomSleep=10 auf im Mittel 5sec heruntergesetzt werden.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Frink
Beiträge: 70
Registriert: 25.11.2017 15:57:49
Lizenz eigener Beiträge: GNU Free Documentation License

Re: unattended-upgrade: Ausführzeiten

Beitrag von Frink » 15.02.2018 18:48:22

rendegast hat geschrieben: ↑ zum Beitrag ↑
15.02.2018 18:22:35
der Hauptteil steckt im apt.systemd.daily-Skript.
Und wo finde ich das? Von wem wird das wann aufgerufen? Sorry, kenne mich mit systemd nicht aus.

EDIT: Achso, das ist /usr/lib/apt/apt.systemd.daily, bleibt noch die Frage von wem das wann aufgerufen wird?

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: unattended-upgrade: Ausführzeiten

Beitrag von rendegast » 15.02.2018 19:21:33

EDIT: Achso, das ist /usr/lib/apt/apt.systemd.daily, bleibt noch die Frage von wem das wann aufgerufen wird?
von den *.timer der *.service getriggert,
in den *.service aufgerufen:

Code: Alles auswählen

systemctl cat apt-daily.service apt-daily-upgrade.service
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Frink
Beiträge: 70
Registriert: 25.11.2017 15:57:49
Lizenz eigener Beiträge: GNU Free Documentation License

Re: unattended-upgrade: Ausführzeiten

Beitrag von Frink » 15.02.2018 20:53:29

Okay, danke.

Was ich nur nicht verstehe ist, wann die Werte aus /etc/apt/apt.conf.d/10periodic gelesen werden. In /usr/lib/apt/apt.systemd.daily wird die Datei nicht explizit gelesen, diese enthält aber Zeilen, wie

Code: Alles auswählen

# check if the user really wants to do something                                                                                                               
AutoAptEnable=1  # default is yes                                                                                                                              
eval $(apt-config shell AutoAptEnable APT::Periodic::Enable)
In man apt-config steht nur, das dieses auf /etc/apt/apt.conf zugreift. Wo werden also die Werte aus /etc/apt/apt.conf.d/10periodic ausgelesen?

Sorry wegen der ganzen Fragerei, aber ich würde es ganz gern verstehen.

Viele Grüße,

Frink

EDIT: Und noch die Frage, was ist, wenn der Computer zu den in /etc/systemd/system/apt-daily.timer definierten Zeitpunkten nicht eingeschaltet ist. Werden diese dann nachgeholt?

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: unattended-upgrade: Ausführzeiten

Beitrag von rendegast » 15.02.2018 22:44:03

In 'man apt.conf' steht, daß apt.conf.d/ dazugehört.
Wenn apt* ausgeführt wird, werden apt.conf und apt.conf.d/* ausgewertet.

Die Skripte /etc/cron.daily/apt-compat, /usr/lib/apt/apt.systemd.daily (früher /etc/cron.daily/apt) und unattended-upgrades kommen per 'apt-config shell ......' an die gesetzten Werte.
Ist in den Skripten nachzulesen.



EDIT: Und noch die Frage, was ist, wenn der Computer zu den in /etc/systemd/system/apt-daily.timer definierten Zeitpunkten nicht eingeschaltet ist. Werden diese dann nachgeholt?
Ja, 'man systemd.timer'.

Code: Alles auswählen

systemctl cat apt-daily.timer apt-daily-upgrade.timer
-> Persistent=true
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Frink
Beiträge: 70
Registriert: 25.11.2017 15:57:49
Lizenz eigener Beiträge: GNU Free Documentation License

Re: unattended-upgrade: Ausführzeiten

Beitrag von Frink » 16.02.2018 10:39:49

Okay, super, Dankeschön.

Antworten