chore(scripts): add systemd ExecStartPre for kord log directory

When StandardOutput=append points under ~/kord/logs, systemd opens the
file before ExecStart; a missing directory causes status 209/STDOUT.
Inject mkdir -p via ExecStartPre so restarts survive a deleted logs folder.

Made-with: Cursor
This commit is contained in:
mineseo-kim 2026-04-09 09:56:46 +09:00
parent ca9413e665
commit 5280f1987b
1 changed files with 46 additions and 0 deletions

View File

@ -0,0 +1,46 @@
#!/usr/bin/env bash
# Run ON THE SERVER as the same user that runs kord (e.g. psa), after: ssh psa@server
# Switches kord user service from journal-only to append logs under ~/kord/logs/kord.log
set -euo pipefail
UNIT="${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user/kord.service"
LOG_DIR="$HOME/kord/logs"
LOG_FILE="$LOG_DIR/kord.log"
mkdir -p "$LOG_DIR"
if [[ ! -f "$UNIT" ]]; then
echo "Unit not found: $UNIT" >&2
exit 1
fi
cp -a "$UNIT" "${UNIT}.bak.$(date +%Y%m%d%H%M%S)"
# Replace journal with file append (idempotent if already set)
sed -i \
-e 's|^StandardOutput=journal|StandardOutput=append:'"$LOG_FILE"'|' \
-e 's|^StandardError=journal|StandardError=append:'"$LOG_FILE"'|' \
"$UNIT"
# systemd opens StandardOutput=append before ExecStart; if ~/kord/logs was deleted,
# the service fails with (code=exited, status=209/STDOUT). Ensure the dir exists first.
if ! grep -qE '^ExecStartPre=.*mkdir.*kord/logs' "$UNIT"; then
sed -i '/^ExecStart=/i ExecStartPre=-/usr/bin/mkdir -p %h/kord/logs' "$UNIT"
fi
systemctl --user daemon-reload
systemctl --user restart kord
sleep 2
systemctl --user --no-pager status kord || true
echo "--- Last lines of $LOG_FILE (if any) ---"
if [[ -f "$LOG_FILE" ]]; then
tail -n 20 "$LOG_FILE"
else
echo "(file not created yet; check status above)"
fi
echo
echo "Follow logs: tail -f $LOG_FILE"