added ensure_app_is_running service script and timer
This commit is contained in:
parent
e11a0db660
commit
536c105f48
@ -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
|
||||
|
||||
|
||||
11
eggs/utility/systemd/ensure_app_is_running.service
Normal file
11
eggs/utility/systemd/ensure_app_is_running.service
Normal 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
|
||||
9
eggs/utility/systemd/ensure_app_is_running.timer
Normal file
9
eggs/utility/systemd/ensure_app_is_running.timer
Normal 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
|
||||
76
eggs/utility/util-scripts/ensure_app_is_running.sh
Normal file
76
eggs/utility/util-scripts/ensure_app_is_running.sh
Normal 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
|
||||
@ -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
|
||||
},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user