improvements
[distro-setup] / mailbindwatchdog
diff --git a/mailbindwatchdog b/mailbindwatchdog
new file mode 100755 (executable)
index 0000000..380256c
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+# When the system boots, systemd-resolved seems to recreate /run/systemd/resolve,
+# or something, because the bindmounts to that directory do not always exist
+# for units starting up at the same time. Anyways, removing and creating that
+# directory definitely has the effect of deleting the bindmount, so
+# here I solve for that ever happening.
+
+if ! test "$BASH_VERSION"; then echo "error: shell is not bash" >&2; exit 1; fi
+shopt -s inherit_errexit 2>/dev/null ||: # ignore fail in bash < 4.4
+set -eE -o pipefail
+trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" exit status: $?, PIPESTATUS: ${PIPESTATUS[*]}" >&2' ERR
+
+if (( $# == 0 )); then
+  echo error: expected service argument >&2
+  exit 1
+fi
+
+[[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
+
+sleep 5
+while true; do
+  sleep 20
+  for unit; do
+    pid=$(systemctl show --property MainPID --value $unit 2>/dev/null ||:)
+    case $pid in
+      [1-9]*)
+        if ! nsenter -t $pid -m timeout 20 mountpoint /run/systemd/resolve &>/dev/null; then
+          echo mail bind restart of $unit
+          timeout 60 systemctl restart $unit ||:
+        fi
+        ;;
+    esac
+  done
+done