54 lines
1.4 KiB
Bash
Executable File
54 lines
1.4 KiB
Bash
Executable File
#! /bin/bash
|
|
#
|
|
# check_systemd_unit.sh
|
|
# Copyright (C) 2021 Vintage Salt <rehashedsalt@cock.li>
|
|
#
|
|
# Distributed under terms of the MIT license.
|
|
#
|
|
|
|
# Usage: Set the first argument to be a systemd unit. The script will respond with the following:
|
|
# The unit is running OK
|
|
# The unit is dead
|
|
|
|
service="$1"
|
|
# If the service is null, be critical
|
|
if [ -z "$service" ]; then
|
|
echo "UNIT CRITICAL: Service is undefined"
|
|
exit 1
|
|
# If systemctl is not present, be critical
|
|
elif ! command -v systemctl > /dev/null 2>&1; then
|
|
echo "UNIT CRITICAL: systemctl missing from PATH"
|
|
exit 1
|
|
# If the service is failed, be critical
|
|
elif systemctl is-failed --quiet "$service" > /dev/null 2>&1; then
|
|
echo "UNIT CRITICAL: $service is failed"
|
|
exit 2
|
|
# Otherwise, see what its state is
|
|
else
|
|
systemctl status "$service" > /dev/null 2>&1
|
|
case $? in
|
|
0)
|
|
echo "UNIT OK: $service is running"
|
|
exit 0
|
|
;;
|
|
1|2)
|
|
echo "UNIT CRITICAL: $service is dead"
|
|
exit 3
|
|
;;
|
|
3)
|
|
# In this case, the unit is not running. Whether this is an issue depends on the type of service
|
|
if systemctl cat backup | grep -ie '^Type=' | grep -ie 'oneshot' > /dev/null 2>&1; then
|
|
echo "UNIT OK: $service is type oneshot and not running"
|
|
exit 0
|
|
else
|
|
echo "UNIT CRITICAL: $service is not running"
|
|
exit 4
|
|
fi
|
|
;;
|
|
4)
|
|
echo "UNIT CRITICAL: $service is not present on this machine"
|
|
exit 50
|
|
;;
|
|
esac
|
|
fi
|