diff --git a/check_systemdunit b/check_systemdunit index 514471f67619d5a53822d7b65c94289056a616e4..9820c3ec9e13e7cb1c4f244713f2a39fcbf82fed 100755 --- a/check_systemdunit +++ b/check_systemdunit @@ -3,23 +3,14 @@ # # CHECK A SINGLE SYSTEMD SERVICE # -# (1) -# shows overview of important services - edit check_systemdservices.cfg to define -# them -# -# (2) -# resturns -# - OK if all systemd servises are running -# - UNKNOWN if systemctl command is not available -# - ERROR if any systemd service is not running -# # ------------------------------------------------------------------------------- -# 2023-09-05 v01.0 <axel.hahn@unibe.ch> +# 2023-09-05 v1.0 <axel.hahn@unibe.ch> +# 2020-09-08 v1.1 <axel.hahn@unibe.ch> add params -s, -l # ================================================================================ . $( dirname $0 )/inc_pluginfunctions -export self_APPVERSION=1.0 +export self_APPVERSION=1.1 # ---------------------------------------------------------------------- # FUNCTIONS @@ -37,16 +28,24 @@ The status is unknown if the command systemctl is not found. The status is critical if the service does not exist or is not running. SYNTAX: - $_self [-h] UNIT + $_self [-h|-l|-s] UNIT OPTIONS: + -h this help + -l list all units + -s list service units + UNIT Name of a unit - see output of 'systemctl' EXAMPLES: - $_self mysql.service - show status of service mysql + $_self -s + list all existing services. For a unit check you need to add the name + in the 1st column. + + $_self nginx.service + show status of nginx webservice EOF } @@ -64,8 +63,31 @@ fi ph.require "systemctl" -_service="${1}" -_status=$( systemctl --no-pager -l status "${_service}" 2>&1 ) +# --- list all units +if ph.hasParamoption "l" "$@" ; then + echo "List of all systemd units:" + echo + _list=$( systemctl --no-legend --no-pager ) + for mytype in $( awk '{ print $1 }' <<< "$_list" | grep '\.' | rev| cut -f 1 -d '.' | rev | grep -v '[^a-z]' | sort -u ) + do + echo "---------- $mytype" + grep "\.${mytype}" <<< "$_list" + echo + done + exit 0 +fi + +# --- list service units +if ph.hasParamoption "s" "$@" ; then + echo "List of service units:" + echo + systemctl --no-legend --no-pager --type service + exit 0 +fi + +# --- check given unit +_unit="${1}" +_status=$( systemctl --no-pager -l status "${_unit}" 2>&1 ) if ! grep "Active: active (running) " <<< "${_status}" >/dev/null; then ph.setStatus critical diff --git a/docs/20_Checks/check_systemdunit.md b/docs/20_Checks/check_systemdunit.md index a73a107b9e3c717e77530d2ba4772de3e7973b1b..e534d153dabb90a07b7307804762a754ffeed7aa 100644 --- a/docs/20_Checks/check_systemdunit.md +++ b/docs/20_Checks/check_systemdunit.md @@ -16,7 +16,7 @@ A unit is everything listed by systemctl command - services, timers, targets, .. ______________________________________________________________________ CHECK_SYSTEMDUNIT -v1.0 +v1.1 (c) Institute for Medical Education - University of Bern Licence: GNU GPL 3 @@ -30,21 +30,53 @@ The status is unknown if the command systemctl is not found. The status is critical if the service does not exist or is not running. SYNTAX: - check_systemdunit [-h] UNIT + check_systemdunit [-h|-l|-s] UNIT OPTIONS: + -h this help + -l list all units + -s list service units + UNIT Name of a unit - see output of 'systemctl' EXAMPLES: - check_systemdunit mysql.service - show status of service mysql + check_systemdunit -s + list all existing services. For a unit check you need to add the name + in the 1st column. + + check_systemdunit nginx.service + show status of nginx webservice ``` ## Examples +### List services + +You maybe want to start to get a list of services to pick an existing one that you wanna check periodically. + +You can use ``systemctl --no-legend --no-pager --type service`` or ``$ ./check_systemdunit -s`` + +```txt +List of service units: + + alsa-restore.service loaded active exited Save/Restore Sound Card State + apparmor.service loaded active exited Load AppArmor profiles + avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack + bluetooth.service loaded active running Bluetooth service + clamav-daemon.service loaded active running Clam AntiVirus userspace daemon + clamav-freshclam.service loaded active running ClamAV virus database updater + colord.service loaded active running Manage, Install and Generate Color Profiles + cronie.service loaded active running Periodic Command Scheduler + ... +``` + +### Check a service + +To check a single service you need to add the unit name in the 1st column. + ``$ ./check_systemdunit nginx`` returns ```txt @@ -67,3 +99,7 @@ If a service does not exist: ``./check_systemdunit justadummy`` returns ```txt CRITICAL: Unit justadummy.service could not be found. ``` + +### Other units + +With ``$ ./check_systemdunit -l`` you get a grouped list of all unit types. check_systemdunit handles all types - not only services.