From 536c105f4883b2d50dc8dccaae1c77301cbf1f1e Mon Sep 17 00:00:00 2001 From: Kyattsukuro Date: Thu, 7 May 2026 02:32:58 +0200 Subject: [PATCH] added ensure_app_is_running service script and timer --- eggs/misc/ssh.config | 2 +- .../systemd/ensure_app_is_running.service | 11 +++ .../systemd/ensure_app_is_running.timer | 9 +++ .../util-scripts/ensure_app_is_running.sh | 76 +++++++++++++++++++ shared_config.rhai | 1 + 5 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 eggs/utility/systemd/ensure_app_is_running.service create mode 100644 eggs/utility/systemd/ensure_app_is_running.timer create mode 100644 eggs/utility/util-scripts/ensure_app_is_running.sh diff --git a/eggs/misc/ssh.config b/eggs/misc/ssh.config index 62beca64..5483b4b4 100644 --- a/eggs/misc/ssh.config +++ b/eggs/misc/ssh.config @@ -1,4 +1,4 @@ -Host 5.75.139.112 mail.bak-it.de web.bak-it.de forum.linksjugend-solid.de backuppc.bak-it.de login.bak-it.de stuff.bak-it.de +Host 78.46.239.229 168.119.171.217 78.47.196.196 5.75.139.112 mail.bak-it.de web.bak-it.de forum.linksjugend-solid.de backuppc.bak-it.de login.bak-it.de stuff.bak-it.de User root IdentityFile ~/.ssh/solidProd diff --git a/eggs/utility/systemd/ensure_app_is_running.service b/eggs/utility/systemd/ensure_app_is_running.service new file mode 100644 index 00000000..15c67f56 --- /dev/null +++ b/eggs/utility/systemd/ensure_app_is_running.service @@ -0,0 +1,11 @@ +[Unit] +Description=ensure_app_is_running.service + +[Service] +Type=oneshot +# https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html#Specifiers +ExecStart=/usr/bin/env bash %h/.local/share/until-scripts/ensure_app_is_running.sh run +Restart=no + +[Install] +WantedBy=multi-user.target diff --git a/eggs/utility/systemd/ensure_app_is_running.timer b/eggs/utility/systemd/ensure_app_is_running.timer new file mode 100644 index 00000000..915d68cf --- /dev/null +++ b/eggs/utility/systemd/ensure_app_is_running.timer @@ -0,0 +1,9 @@ +[Unit] +Description=Run ensure_app_is_running periodicly + +[Timer] +Unit=ensure_app_is_running.service +OnUnitInactiveSec=60s + +[Install] +WantedBy=timers.target diff --git a/eggs/utility/util-scripts/ensure_app_is_running.sh b/eggs/utility/util-scripts/ensure_app_is_running.sh new file mode 100644 index 00000000..60c03a82 --- /dev/null +++ b/eggs/utility/util-scripts/ensure_app_is_running.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash + +TMP_FILE=/tmp/ensure_running.json +BOOT_ID=$(cat /proc/sys/kernel/random/boot_id) +data=$(cat "$TMP_FILE") + + +prep_tmp_if_needed() { + if [ ! -f "$TMP_FILE" ]; then + echo "{ \"boot_id\": \"$BOOT_ID\", \"entries\": [], \"running_pids\": {} }" > "$TMP_FILE" + fi + data=$(cat "$TMP_FILE") + data_bid=$(jq -r '.boot_id' <<< $data) + if [[ "$data_bid" == "" || "$data_bid" != "$BOOT_ID" ]]; then + rm $TMP_FILE + prep_tmp_if_needed + return + fi +} + +run() { + prep_tmp_if_needed + + while read -r e; do + existing_pid=$(jq -r --arg k "$e" '.running_pids[($k)]?' <<< "$data") + if [[ $existing_pid != "null" && "$(ps -p $existing_pid -o pid --no-headers)" != "" ]]; then + continue + fi; + + bash -lc "$e" & + pid=$! + + data=$(jq --arg k "$e" --arg v "$pid" \ + '.running_pids += {($k): $v}' <<< "$data") + done < <(jq -r '.entries[]' <<< "$data") + echo "$data" > "$TMP_FILE" +} + +register() { + prep_tmp_if_needed + + data=$(jq --arg val "$*" '.entries += [$val]' <<< "$data") + data=$(jq '.entries |= unique' <<< "$data") + echo "$data" > "$TMP_FILE" +} + +remove() { + prep_tmp_if_needed + + diff=$data + data=$(jq --arg val "$*" '.entries -= [$val]' <<< "$data") + if [ "$diff" = "$data" ]; then + echo "Element to remove was not found" + exit 1 + fi + echo "$data" > "$TMP_FILE" +} + +list() { + jq -C <<< "$data" +} + +i=1 +for arg in "$@"; do + i=( $i+1 ) + case $arg in + run) run; exit 0; ;; + register) + register "${@:i}"; exit 0; ;; + remove) + remove "${@:i}"; exit 0; ;; + list) list; exit 0; ;; + *) + echo "Unsuported: $arg"; exit 1 ;; + esac +done diff --git a/shared_config.rhai b/shared_config.rhai index 88800f34..e36b16bd 100644 --- a/shared_config.rhai +++ b/shared_config.rhai @@ -26,6 +26,7 @@ export let base = #{ targets: #{ "util-scripts": "~/.local/share/until-scripts/", "nem": "~/.local/share/nem", + "systemd": "~/.local/share/systemd/user" }, enabled: true },