21 lines
600 B
Bash
21 lines
600 B
Bash
#!/usr/bin/env bash
|
|||
|
|
# Restart a daemon idempotently — safe to call from i3's exec_always.
|
||
|
|
# usage: restart-daemon <name> [args…]
|
||
|
|
set -uo pipefail
|
||
|
|
|
||
|
|
name="${1:?usage: restart-daemon <name> [args...]}"
|
||
|
|
shift || true
|
||
|
|
|
||
|
|
command -v "$name" >/dev/null 2>&1 || { echo "restart-daemon: $name not installed" >&2; exit 0; }
|
||
|
|
|
||
|
|
pkill -x "$name" >/dev/null 2>&1 || true
|
||
|
|
for _ in {1..20}; do
|
||
|
|
pgrep -x "$name" >/dev/null || break
|
||
|
|
sleep 0.1
|
||
|
|
done
|
||
|
|
pgrep -x "$name" >/dev/null && pkill -9 -x "$name"
|
||
|
|
|
||
|
|
log="${XDG_CACHE_HOME:-$HOME/.cache}/$name.log"
|
||
|
|
mkdir -p "$(dirname "$log")"
|
||
|
|
exec "$name" "$@" >>"$log" 2>&1 &
|