aboutsummaryrefslogtreecommitdiff
path: root/pkgs/check_systemd
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/check_systemd')
-rwxr-xr-xpkgs/check_systemd/check_systemd20
-rw-r--r--pkgs/check_systemd/default.nix25
2 files changed, 45 insertions, 0 deletions
diff --git a/pkgs/check_systemd/check_systemd b/pkgs/check_systemd/check_systemd
new file mode 100755
index 0000000..e668331
--- /dev/null
+++ b/pkgs/check_systemd/check_systemd
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+readarray -t failed < <( systemctl show '*.service' \
+ --state=failed --property=Names \
+ | sed -r -n 's,Names=(.+)\.service,\1,p' \
+ | sort
+ )
+
+if [ ${#failed[@]} -ne 0 ]; then
+ printf -v list ', %s' "${failed[@]}"
+ printf 'WARNING: %s failed\n' "${list:2}"
+ exit 1
+else
+ echo "OK: no failed services"
+ exit 0
+fi
+
+
diff --git a/pkgs/check_systemd/default.nix b/pkgs/check_systemd/default.nix
new file mode 100644
index 0000000..da92a64
--- /dev/null
+++ b/pkgs/check_systemd/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, gnused }:
+
+stdenv.mkDerivation {
+ name = "check_systemd";
+ src = ./check_systemd;
+ outputs = [ "out" "conf" ];
+ unpackPhase = ":";
+ installPhase = ''
+ mkdir -p $out/bin
+
+ cp "$src" $out/bin/check_systemd
+
+ substituteInPlace "$out/bin/"* \
+ --replace sed '${gnused}/bin/sed'
+
+ chmod +x "$out/bin/"*
+
+ cat <<CONF > $conf
+ object CheckCommand "systemd" {
+ import "plugin-check-command"
+ command = [ "$out/bin/check_systemd" ]
+ }
+ CONF
+ '';
+}