it-swarm.com.de

Wie kann ich über die Befehlszeile überprüfen, ob unter RHEL oder CentOS ein Neustart erforderlich ist?

Ich verwende CentOS und Red Hat Enterprise Linux auf einigen Computern ohne GUI. Wie kann ich überprüfen, ob kürzlich installierte Updates einen Neustart erfordern? In Ubuntu bin ich es gewohnt zu überprüfen, ob /var/run/reboot-required ist anwesend.

47
Jim Hunziker

https://access.redhat.com/discussions/3106621#comment-1196821

Vergessen Sie nicht, dass Sie möglicherweise aufgrund von Aktualisierungen der Kernbibliothek neu starten müssen, zumindest wenn es sich um glibc handelt. (Außerdem müssen Dienste möglicherweise nach Aktualisierungen neu gestartet werden.).

Wenn Sie das Paket yum-utils Installieren, können Sie einen Befehl namens needs-restarting Verwenden.

Sie können beide verwenden, um zu überprüfen, ob ein vollständiger Neustart aufgrund von Kernel- oder Kernbibliotheksaktualisierungen erforderlich ist (mit der Option -r) Oder welche Dienste neu gestartet werden müssen (mit der Option -s). .

needs-restarting -r Gibt 0 Zurück, wenn kein Neustart erforderlich ist, und 1, Wenn dies der Fall ist. Daher ist es perfekt für die Verwendung in einem Skript.

Ein Beispiel:

[email protected]:~> needs-restarting  -r ; echo $?
Core libraries or services have been updated:
  openssl-libs -> 1:1.0.1e-60.el7_3.1
  systemd -> 219-30.el7_3.9

Reboot is required to ensure that your system benefits from these updates.

More information:
https://access.redhat.com/solutions/27943
1
42
xddsg

Informationen zum Vergleichen installierter Kernel mit dem Ausführen eines:

#!/bin/bash
LAST_KERNEL=$(rpm -q --last kernel | Perl -pe 's/^kernel-(\S+).*/$1/' | head -1)
CURRENT_KERNEL=$(uname -r)

test $LAST_KERNEL = $CURRENT_KERNEL || echo REBOOT

Ich hoffe, das hilft!

33
alexm

Sie können die Ausgabe von uname -a mit der Liste der installierten Kernel-Pakete vergleichen

7
Dominik

uname -a vs. rpm -q kernel und needs-restarting von yum-utils

6
ptman

Eine Sache, die im Hinblick auf "ist ein Neustart erforderlich" hilfreich sein kann, ist, ob Dateien vorhanden sind, die durch das Update entfernt/ersetzt wurden, für die die alten Dateien jedoch noch von aktiven Prozessen geladen/verwendet werden.

Wenn YUM eine Datei aktualisiert, die von einem Prozess verwendet wird, wurde die Datei selbst möglicherweise zum Löschen markiert. Der Prozess verwendet jedoch weiterhin die alte Datei, da ein offener Dateideskriptor für den Inode der alten Datei vorhanden ist.

Ein Befehl zum Abrufen der Anzahl der noch verwendeten alten Dateien:

#lsof | grep "(path inode=.*)" | wc -l

Dieser Befehl gibt Ihnen eine Anzahl der Dateien.

Verwenden Sie dies stattdessen, um zu sehen, welche Dateien tatsächlich verwendet werden:

#lsof | grep "(path inode=.*)"

Dieser Befehl erzeugt eine Ausgabe ähnlich der folgenden in einer YUM-aktualisierten Box:

COMMAND    PID   USER   FD      TYPE DEVICE SIZE/OFF   NODE NAME
sshd      3782   root  mem       REG   8,17          153427 /lib64/libcrypto.so.0.9.8e (path inode=153253)
mysqld    3883  mysql  mem       REG   8,17          153259 /lib64/libcrypt-2.5.so (path inode=153402)
mingetty  4107   root  mem       REG   8,17          153243 /lib64/libc-2.5.so (path inode=153222)
...
etc
5
GrangerX

Überprüfen Sie, ob der laufende Kernel der neueste ist.

Ist dies nicht der Fall, überprüfen Sie, ob das System seit der Kernelinstallation neu gestartet wurde.

Wenn nicht, starten Sie neu.

CURRENT_KERNEL="$(rpm -q kernel-$(uname -r))"
test -z "$CURRENT_KERNEL" && exit 0     # Current kernel is a custom kernel

LATEST_KERNEL="$(rpm -q kernel | tail -1)"
test -z "$LATEST_KERNEL" && exit 0      # No kernel package installed

LATEST_KERNEL_INSTALLTIME=$(rpm -q kernel --qf "%{INSTALLTIME}\n" | tail -1)
test -z "$LATEST_KERNEL_INSTALLTIME" && exit 1      # Error reading INSTALLTIME

test "$CURRENT_KERNEL" = "$LATEST_KERNEL" && exit 0 # Latest kernel running, no reboot needed

BOOTTIME="$(sed -n '/^btime /s///p' /proc/stat)"
test -z "$BOOTTIME" && exit 1           # Error reading BOOTTIME

test "$LATEST_KERNEL_INSTALLTIME" -lt "$BOOTTIME" && exit 1 # Latest kernel not running, but system was restarted already
                                        # User switched back to an old kernel?

echo reboot
2
Nicolas Melay

Hier ist meine Version des Alexm-Codes. Du kannst das:

LAST_KERNEL=$(rpm -q --last kernel | Perl -pe 's/^kernel-(\S+).*/$1/' | head -1)
 CURRENT_KERNEL=$(uname -r)

 if [ $LAST_KERNEL != $CURRENT_KERNEL ]
 then 
    echo "It is time to Reboot!"
 else 
    echo "There is nothing to do!"
 fi
1
sandman

Ich weiß, dass diese Frage bereits beantwortet wurde und dass Leute Informationen über die Suche nach neueren Kerneln sowie gelöschte Dateien veröffentlicht haben, aber ich habe kürzlich ein Skript geschrieben, das nach beiden sucht. Wenn eine der beiden Bedingungen erkannt wird, ist der Neustart für +30 Minuten geplant.

#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

NEW_KERN=0
DEAD_FILES=0

die () {
    printf "Error, exiting: "
    echo [email protected]
    exit 1
}

for X in lsof wc column awk rpm sed head uname dd tr cut date logger shutdown; do
    which "${X}" >/dev/null 2>&1 || die "required application ${X} not found"
done

DATEY="$(date +%Y%m%d-%H%M%S)"
TMPFILE=/tmp/"$(dd if=/dev/urandom bs=1 count=256 2>/dev/null |tr -c -d '0-9a-f' |cut -c-7)"

[ $TMPFILE == "/tmp/" ] && die
echo "### Reboot automation notice: ${DATEY} ###" > "${TMPFILE}"
lsof +c0 -d DEL | grep -v '\s/SYSV' |awk 'NR==1 || !/dev\/zero/ {print $2,$1,$4,$NF}' | column -t >> "${TMPFILE}"

if [ $(cat ${TMPFILE} |wc -l) -gt 2 ]; then
    DEAD_FILES=1
else
    echo "### Reboot automation notice: ${DATEY} ###" > "${TMPFILE}"
fi

C_KERN="kernel-$(uname -r)"
A_KERN="$(rpm -q --last kernel |head -1 |sed 's|\s\+.*$||')"

[ $A_KERN != $C_KERN ] && NEW_KERN=1 && printf "Running $C_KERN, but $A_KERN available\n" >> "${TMPFILE}"

echo "### End of reboot automation notice: ${DATEY} ###" >> "${TMPFILE}"
if [[ $DEAD_FILES -eq 0 && $NEW_KERN -eq 0 ]]; then
    echo reboot not required
else
    logger -t rebooter -p auth.warning -f "${TMPFILE}"
    [ $DEAD_FILES -ne 0 ] && echo "   Processes running with broken links to executables,"
    [ $NEW_KERN -ne 0 ] && echo "   New kernel available,"
    echo Reboot is required
    shutdown -r +30 "System reboot is required.  To cancel use shutdown -c.  But don't because this system needs to be rebooted"
fi

[ -f "${TMPFILE}" ] && rm -f "${TMPFILE}"
1
Liczyrzepa