diff options
| author | yyamashita <yyamashita@hetzner.yyamashita.com> | 2026-05-17 11:29:27 +0900 |
|---|---|---|
| committer | yyamashita <yyamashita@hetzner.yyamashita.com> | 2026-05-17 11:29:27 +0900 |
| commit | ef6dbdd2ac273dc4a01c70437ee7984cea9f2a3c (patch) | |
| tree | 4db9e4917a3a2ffb4d96d02fd7927dd7dcaabf39 /scripts/sync-claude-services.sh | |
| parent | fa8880f38783bebbce805f8595c949b9c7f326a0 (diff) | |
Reorganize repo into caddy/, git/, claude/ directories
- caddy/: Caddyfile, docker-compose.yml, deploy.sh (hook runs this only)
- git/: repos.txt, hooks/*/post-receive, install.sh, server-setup.sh
- claude/: sessions.txt, systemd/claude-code@.service, sync.sh
Post-receive hook is now: checkout + bash caddy/deploy.sh
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'scripts/sync-claude-services.sh')
| -rwxr-xr-x | scripts/sync-claude-services.sh | 70 |
1 files changed, 0 insertions, 70 deletions
diff --git a/scripts/sync-claude-services.sh b/scripts/sync-claude-services.sh deleted file mode 100755 index a9a76fb..0000000 --- a/scripts/sync-claude-services.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env bash -# サーバー側で root として実行し、各ユーザーの Claude Code systemd user service を同期する -set -euo pipefail - -APP_DIR="$(cd "$(dirname "$0")/.." && pwd)" -TEMPLATE_SRC="$APP_DIR/systemd/user/claude-code@.service" -SESSIONS_FILE="$APP_DIR/claude-code-sessions.txt" - -# sessions.txt をパースして user -> repos のマップを構築 -declare -A user_repos - -while IFS= read -r line; do - [[ "$line" =~ ^#.*$ || -z "$line" ]] && continue - user="${line%%:*}" - repo="${line#*:}" - user_repos["$user"]+=" $repo" -done < "$SESSIONS_FILE" - -for user in "${!user_repos[@]}"; do - uid=$(id -u "$user" 2>/dev/null) || { echo "WARNING: user $user not found, skipping"; continue; } - runtime_dir="/run/user/$uid" - systemd_dir="/home/$user/.config/systemd/user" - - mkdir -p "$systemd_dir" - chown "$user:$user" "$systemd_dir" - - # テンプレートを更新(差分があれば) - if ! diff -q "$TEMPLATE_SRC" "$systemd_dir/claude-code@.service" >/dev/null 2>&1; then - echo "[$user] Updating claude-code@.service template" - cp "$TEMPLATE_SRC" "$systemd_dir/claude-code@.service" - chown "$user:$user" "$systemd_dir/claude-code@.service" - runuser -u "$user" -- env XDG_RUNTIME_DIR="$runtime_dir" DBUS_SESSION_BUS_ADDRESS="unix:path=$runtime_dir/bus" \ - systemctl --user daemon-reload - fi - - # sessions.txt で指定されたリポジトリを enable & start - desired=() - for repo in ${user_repos[$user]}; do - [[ -z "$repo" ]] && continue - desired+=("$repo") - repo_path="/home/$user/workspaces/repos/$repo" - if [[ ! -d "$repo_path" ]]; then - echo "[$user] WARNING: $repo_path not found, skipping $repo" - continue - fi - runuser -u "$user" -- env XDG_RUNTIME_DIR="$runtime_dir" DBUS_SESSION_BUS_ADDRESS="unix:path=$runtime_dir/bus" \ - systemctl --user enable "claude-code@${repo}.service" 2>/dev/null || true - if ! runuser -u "$user" -- env XDG_RUNTIME_DIR="$runtime_dir" DBUS_SESSION_BUS_ADDRESS="unix:path=$runtime_dir/bus" \ - systemctl --user is-active "claude-code@${repo}.service" >/dev/null 2>&1; then - echo "[$user] Starting claude-code@${repo}.service" - runuser -u "$user" -- env XDG_RUNTIME_DIR="$runtime_dir" DBUS_SESSION_BUS_ADDRESS="unix:path=$runtime_dir/bus" \ - systemctl --user start "claude-code@${repo}.service" || true - fi - done - - # sessions.txt にないが enabled になっているインスタンスを無効化 - while IFS= read -r unit; do - instance="${unit#claude-code@}" - instance="${instance%.service}" - if ! printf '%s\n' "${desired[@]}" | grep -qx "$instance"; then - echo "[$user] Disabling claude-code@${instance}.service (not in sessions.txt)" - runuser -u "$user" -- env XDG_RUNTIME_DIR="$runtime_dir" DBUS_SESSION_BUS_ADDRESS="unix:path=$runtime_dir/bus" \ - systemctl --user disable --now "claude-code@${instance}.service" || true - fi - done < <(runuser -u "$user" -- env XDG_RUNTIME_DIR="$runtime_dir" DBUS_SESSION_BUS_ADDRESS="unix:path=$runtime_dir/bus" \ - systemctl --user list-unit-files --plain --no-legend 'claude-code@*.service' 2>/dev/null \ - | awk '$2 == "enabled" {print $1}') -done - -echo "Claude Code session sync complete." |
