Jag är däremot till stor del "uppväxt" i server-världen och där handlar det om att en dator måste gå så länge som det bara är möjligt, innan man startar om den...
Jovisst, inom Linux är det ju många som gärna säger att "det bara är att låta den gå hur länge som helst, för Linux minneshantering (etc.) är så himla effektiv"...
Men nådå, eller nja, eller kanske, knappast eller näääeeee.....
Hemma kör man ju ofta en dator där man gärna uppgraderar för att åtminstone någotsånär ha moderna saker, men ute på företag (framförallt drifts- och produktions-maskiner), så står samma gamla saker och snurrar, år efter år. Just för att det är stabilt och riskerna är små....
Själv låter jag ofta burken gå i en månad eller två utan att starta om (ja ok, den "spinner ned" på natten), bara för att jag är så van vid att en dator ska inte stängas av i onödan....
Men om man då är osäker, eller om man själv ska kolla när man borde starta om, hur gör man då...??
Så jag "hackade ihop" ett lite enkelt script som man kan använda för att kontrollera det.
Jag har provat det i Ubuntu, Mint, Debian, OpenSUSE, SLED, SLES, RedHat, Fedora och CentOS och det funkar jättebra i alla förutom RedHat-gruppen där det lite omotiverat antyder att omstart måste göras, trots att det inte behövs. Dessutom ingår den här kontrollen numera i "dnf" (nya versionen av "yum"), men funkar alltså inte riktigt ändå (för mig). Jag ska kolla närmare på det....
Men i Debian-Ubuntu-Mint och Opensuse-SLED-SLES funkar det bra....
Kom gärna med synpunkter!
Kod: Markera allt
#! /bin/bash
#
function krnl {
NAME=$(uname -s)
MACHINE=$(uname -m)
RUNNING_KRNL=$(uname -r)
NEWEST_KRNL=$(ls -l /boot/vmlinuz | awk '{ print $11 }' | sed 's/vmlinuz-//g')
#echo
echo "Running kernel is: $(uname -rms)"
if [[ $RUNNING_KRNL != $NEWEST_KRNL ]]; then
echo -e "\033[1m\033[31m=>A newer kernel exists, consider rebooting !!!!!\033[0m"
echo "Newer version is: $NAME $NEWEST_KRNL $MACHINE"
fi
echo
}
function chkProc {
RETURN=0
NPROC=$(ps -ef | tail -n +2 | wc -l)
NPROCT=$(ps -efT | tail -n +2 | wc -l)
MAX_PROC=$(cat /proc/sys/kernel/pid_max)
if [[ -z $1 || $1 == "INIT" ]]; then
MAX_PROC=$(cat /proc/sys/kernel/pid_max)
MAX_UPROC=$(ulimit -u)
fi
let Z_count=0
PIDS=$(ls -d /proc/[0-9]* 2> /dev/null | awk -F/ '{ print $3 }' 2>> /dev/null)
for PID in $PIDS; do
PSTATE=$(grep State: /proc/$PID/status 2>> /dev/null| awk '{ print $2 }')
if [[ ! -z $PSTATE ]]; then
if [[ $PSTATE == "X" ]]; then
let X_count+=1
RETURN=1
elif [[ $PSTATE == "Z" ]]; then
let Z_count+=1
RETURN=1
fi
fi
done
echo "Number of processes: $NPROC"
echo "Number of processes+threads: $NPROCT"
echo "Max process limit: $MAX_PROC"
if [[ $X_count -ne 0 ]]; then
echo "-Dead processes: $X_count"
fi
if [[ $Z_count -ne 0 ]]; then
echo "-Zombie processes: $Z_count"
fi
if [[ $X_count -ne 0 || $Z_count -ne 0 ]]; then
echo "*** Consider REBOOT ***"
fi
return $RETURN
}
if [[ $UID != 0 ]]; then
echo
echo "-This script must be run as root..."
echo
exit
fi
clear
echo
echo "=============================================================================="
echo "-Up in $(uptime -p)"
echo
echo "=============================================================================="
echo '-Checking "/var/run/reboot-recuired"'
if [[ -r /var/run/reboot-required ]]; then
echo -en "\033[1m\033[31m"
cat /var/run/reboot-required
if [[ -r /var/run/reboot-required.pkgs ]]; then
echo "-Packages that need reboot:"
cat /var/run/reboot-required.pkgs | sort -u
fi
echo -en "\033[0m"
fi
echo
echo "=============================================================================="
echo "-Checking kernel"
krnl
echo "=============================================================================="
echo "-Checking processes"
chkProc
echo
DIST=$(source /etc/os-release; echo $ID | awk -F \- '{ print $1 }')
if [[ $DIST == "ubuntu" || $DIST == "linuxmint" || $DIST == "debian" ]]; then
echo "=============================================================================="
echo '-Running "needrestart"'
if [[ ! -z $(which needrestart 2> /dev/null) ]]; then
needrestart
else
echo 'needrestart is not installed - use "sudo apt install needrestart" to install it..."'
fi
echo
echo "=============================================================================="
echo '-Running "checkrestart"'
echo '-Note that most messages about "fuse" can be ignored...'
if [[ ! -z $(which checkrestart 2> /dev/null) ]]; then
checkrestart -t
else
echo 'debian-goodies is not installed - use "sudo apt install debian-goodies" to install it...'
fi
echo
elif [[ $DIST == "opensuse" || $DIST == "sles" || $DIST == "sled" || $DIST == "sle" ]]; then
echo "=============================================================================="
if [[ -z $(which needs-restarting 2> /dev/null) ]]; then
echo '-Running "zypper ps"'
zypper ps
else
#echo 'yum-utils is not installed - use "sudo zypper install yum-utils" to install it...'
echo '-Running "needs-restarting"'
needs-restarting
fi
echo
elif [[ $DIST == "fedora" || $DIST == "centos" || $DIST == "redhat" || $DIST == "rhel" ]]; then
echo "=============================================================================="
if [[ ! -z $(which needs-restarting 2> /dev/null) ]]; then
echo '-Running "dnf needs-restarting -r"'
dnf needs-restarting -r
echo
else
echo '-Running "needs-restarting -r"'
needs-restarting -r
echo
fi
else
echo "=============================================================================="
echo "-$DIST is not supported yet, sorry!"
echo
fi