Auto-Reboot nach Kernel-Update

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
mrserious
Beiträge: 270
Registriert: 22.06.2013 12:12:03

Auto-Reboot nach Kernel-Update

Beitrag von mrserious » 28.02.2015 16:31:09

Hallo zusammen!

Bisher prüfe ich per cron alle 30min auf Updates (welche dann auch eingespielt würden, falls vorhanden) und starte meinen Server früh morgens neu (ebenfalls per cron). Letzteres für den Fall, dass es ein Update gab, nach dem neu gestartet werden muss.

Lässt sich das verbessern?
Ich würde gerne nurnoch an Tagen neustarten, an denen es Updates gab, die dies nötig machen.

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

Re: Auto-Reboot nach Kernel-Update

Beitrag von rendegast » 28.02.2015 22:30:43

Debiandebian-goodies, 'checkrestart'.
Das Tool, Vorschäge 'service xxxx restart', ist grob brauchbar.

systemd-Prozesse sind problematisch,
auch Dienste/Prozesse in Containern.
Diese sollten identifiziert und gesondert behandelt werden.
ZBsp. benötigt ein systemd-Init ein 'systemctl daemon-reexec' statt eines
'service xxxxxx restart' resp. 'systemctl restart xxxxxx.xervice'.

Dito natürlich kernel-Upgrades, die von dem Tool gar nicht behandelt werden.
Auch zBsp. getty, oder von cron gestartete Prozesse, für die checkrestart immer ein 'service cron restart' ausgibt.


Dein Reboot-Job kann ja nach einem Lockfile sehen,
welches von einem mit obigem Tool arbeitenden Skript gesetzt oder gelöscht wird.
Speziell beim kernel,
ein Skript könnte abgleichen

Code: Alles auswählen

# cat /proc/version | awk '{print $3,$(NF-1)}'
3.16.0-4-amd64 3.16.7-ckt4-3
und

Code: Alles auswählen

VER=3.16.0-4-amd64
aptitude search "?installed(linux-image-$VER)" -F"%V"
oder 
dpkg -l grep linux-image-$VER
und bei Unterschied, also einem inzwischen neu installierten Kernelpaket, einen Neustart auslösen.
Vielleicht auch einen Trigger in /etc/kernel/../ (halte ich für unpraktikabel),
oder ein Test auf neueres Datum der /boot/vmlinuz-..., viele Möglichkeiten.



Mein bisheriger Entwurf für checkrestart-do.sh

Code: Alles auswählen

#!/bin/sh

TMPf=$(tempfile)

checkrestart | tee $TMPf

#ls -l /sbin/init
ps hp 1 | grep -q systemd && HAS_SYSTEMD=1

cat $TMPf | uniq | awk '$1=="service" && $3=="restart"' | while read prg svc cmd; do
    [ "x$HAS_SYSTEMD" = "x1" ] && { prg="systemctl restart"; svc="$svc.service"; cmd=; }
    case "$svc" in
        vsftpd)
            $prg $svc $cmd
            /usr/local/sbin/dpkg-invoke--vsftpd
        ;;
        smbd|nmbd|samba-ad-dc)
        ;;
        samba)
            $prg $svc $cmd
        ;;
        udev-finish)
        # wird normalerweise durch 'udev' erledigt.
        ;;
        *systemd*|*login*|*journal*)
        [ "x$HAS_SYSTEMD" = "x1" ] && echo="echo SYSTEMD"
        $echo $prg $svc $cmd
        ;;
        *)
            $prg $svc $cmd
        ;;
    esac
done

rm $TMPf
(Mehrere vsftpd-Instanzen laufen bei mir über jeweils eigene Startskripte,
die aber von checkrestart nicht so erkannt werden)
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

mrserious
Beiträge: 270
Registriert: 22.06.2013 12:12:03

Re: Auto-Reboot nach Kernel-Update

Beitrag von mrserious » 01.03.2015 10:11:52

Ah sehr gut!
Ich sehe schon, du hast dir da Mühe gemacht.

Bei mir ist es halt so, dass es um nen Backoffice-Server geht.
Ich kann also garantieren, dass den früh morgens noch niemand benutzt.
Insofern frag ich mich jetzt, ob sich der Aufwand lohnt, das zu implementieren.

Denn letztlich entsteht ja keine Leistungseinbuße oder vorzeitige Alterung, wenn der Rechner täglich, statt z.B. monatlich rebooted wird?

Antworten