You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.2 KiB
Python

#!/usr/bin/python3
# Nagios plugin to check the system state according to systemd.
from __future__ import division, print_function
import posixpath
import subprocess
import sys
try:
import dbus
except ImportError:
print("UNKNOWN: Please install python-dbus")
sys.exit(3)
bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.systemd1', '/org/freedesktop/systemd1')
def get_system_state():
"""Get system state."""
properties = dbus.Interface(proxy, 'org.freedesktop.DBus.Properties')
system_state = properties.Get('org.freedesktop.systemd1.Manager', 'SystemState')
return system_state
def get_failed_units():
"""Get a list of failed system units."""
manager = dbus.Interface(proxy, 'org.freedesktop.systemd1.Manager')
units = manager.ListUnits()
failed_units = []
for u in units:
service, _, loaded, active, state = u[:5]
if active == 'failed':
failed_units.append(service)
return failed_units
system_state = get_system_state()
if system_state in ['running', 'starting']:
print('OK: {}'.format(system_state))
sys.exit(0)
else:
print('CRIT: {}, failed: {}'.format(system_state, " ".join(get_failed_units())))
sys.exit(2)
# vim:tw=120: