Stop the scheduler handing Claude root's HOME
Build Container / build-container (pull_request) Successful in 1m11s
Build Container / build-container (pull_request) Successful in 1m11s
Every scheduled task failed with "Not logged in · Please run /login" while the container's OAuth credential sat there, valid, the whole time. The entrypoint snapshots the environment into ~/.claude/scheduler/.env so cron jobs get more than cron's minimal env. It runs as root, and HOME was in the capture list, so the file recorded HOME=/root. The task runner then sources that file with `set -a`, overwriting the HOME cron gave the job. `claude -p` looks for its credential under $HOME, finds no /root/.claude, and exits 1. Logging still worked — SCHEDULER_DIR is expanded before the sourcing — which is why this presents as a well-formed log of a task that never authenticated. Drop HOME from the captured set and write it explicitly instead; cron does still need one. Then restore HOME across the source in the task runner too: .env lives on the home volume, so every project created before this ships keeps a stale copy of it until its container restarts, and the runner is what has to survive that. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -34,11 +34,19 @@ if ! flock -n 200; then
|
||||
fi
|
||||
|
||||
# ── Source saved environment ─────────────────────────────────────────────────
|
||||
# The env file is a snapshot taken by the entrypoint, which runs as root. A
|
||||
# snapshot written before the entrypoint stopped capturing HOME still carries
|
||||
# HOME=/root, and `set -a` would apply it to `claude` below — which then finds no
|
||||
# credential under /root/.claude and exits with "Not logged in". The env file
|
||||
# lives on the home volume, so those stale copies outlive an image update until
|
||||
# the container is restarted; keep our own HOME regardless of what it says.
|
||||
if [ -f "$ENV_FILE" ]; then
|
||||
REAL_HOME="${HOME:-/home/claude}"
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source "$ENV_FILE"
|
||||
set +a
|
||||
HOME="$REAL_HOME"
|
||||
fi
|
||||
|
||||
# ── Read task definition ────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user