added ensure_app_is_running service script and timer

This commit is contained in:
Kyattsukuro 2026-05-07 02:32:58 +02:00
parent e11a0db660
commit 536c105f48
5 changed files with 98 additions and 1 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
},