Skip to content
Snippets Groups Projects
check_reboot_required 2.87 KiB
#!/bin/bash
# ======================================================================
#
# NAGIOS CLIENT CHECK :: is a restart required?
#
# ----------------------------------------------------------------------
# works for sure on
# - centos7,8
# - debian6..10
# - ubuntu10,12
# ----------------------------------------------------------------------
# 2016-08-12  added ouput of packages
# 2020-03-05  v1.2  <axel.hahn@iml.unibe.ch> switch to ph.* helper functions
# 2022-10-14  v1.3  <axel.hahn@unibe.ch>     fix debian output if /var/run/reboot-required.pkgs does not exist
#                                            Shellfixes; add help
# 2023-03-29  v1.4  <martin.gasser@unibe.ch> add almalinux as distro
# ======================================================================


. $(dirname $0)/inc_pluginfunctions

self_APPNAME=$( basename $0 | tr [:lower:] [:upper:] )
self_APPVERSION=1.3

distro=$( ph.getOS )

# ----------------------------------------------------------------------
# functions
# ----------------------------------------------------------------------

function showHelp(){
cat <<EOF
______________________________________________________________________

$self_APPNAME 
v$self_APPVERSION

(c) Institute for Medical Education - University of Bern
Licence: GNU GPL 3
______________________________________________________________________

Check if a reboot is required.
It works for Centos and Debian/ Ubuntu.

If the reboot is required:
* On Centos it shows the kernel number that will be installed,
* On Debian/ Ubuntu it shows the packages that require the reboot,

SYNTAX:
$(basename $0)

OPTIONS:

    -h or --help   show this help.

PARAMETERS:

    None.

EXAMPLE:
$(basename $0)

EOF
}
# ----------------------------------------------------------------------

# --- check param -h
case "$1" in
    "--help"|"-h")
        showHelp
        exit 0
        ;;
    *)
esac

case $distro in

  "centos"|"almalinux")
    currentkernel=$(uname -r)
    out=$(rpm -q --last kernel | head -1 | grep -F $currentkernel)
    if [ -z "$out" ]; then
      ph.setStatus "warning"
      ph.status "[$distro] need to reboot for kernel $(rpm -q --last kernel | head -1) (current: $currentkernel)"
    else
      ph.status "[$distro] no reboot required (kernel is up to date: $currentkernel)"
    fi
    ;;

  "debian"|"ubuntu")
  
    if [ ! -f /var/run/reboot-required ]; then
        ph.status "[$distro] no reboot required"
    else
        byPackages="(I do not know the package that requires it)"
        test -f /var/run/reboot-required.pkgs && byPackages="by $( tr '\n' ',' < /var/run/reboot-required.pkgs )"
        ph.setStatus "warning"
        ph.status "[$distro] $( cat /var/run/reboot-required ) ${byPackages}"
    fi
    ;;

  *)
    ph.abort "UNKNOWN: distro [$distro] was detected but is not supported (yet)."
    ;; 
esac

ph.exit

# ----------------------------------------------------------------------