@@ -247,43 +247,56 @@ tar --no-overwrite-dir -xzf runner.tar.gz
247247cat > /usr/local/bin/job-started-hook.sh << 'EOFS '
248248#!/bin/bash
249249exec >> /tmp/job-started-hook.log 2>&1
250+ V="/var/run/github-runner"
250251echo "[$$(date)] ${log_prefix_job_started} $${GITHUB_JOB}"
251- mkdir -p /var/run/github-runner -jobs
252- echo '{"status":"running"}' > /var/run/github-runner -jobs/$${GITHUB_RUN_ID}-$${GITHUB_JOB}.job
253- touch /var/run/github-runner- last-activity /var/run/github-runner -has-run-job
252+ mkdir -p $$V -jobs
253+ echo '{"status":"running"}' > $$V -jobs/$${GITHUB_RUN_ID}-$${GITHUB_JOB}.job
254+ touch $$V- last-activity $$V -has-run-job
254255EOFS
255256
256257cat > /usr/local/bin/job-completed-hook.sh << 'EOFC '
257258#!/bin/bash
258259exec >> /tmp/job-completed-hook.log 2>&1
260+ V="/var/run/github-runner"
259261echo "[$$(date)] ${log_prefix_job_completed} $${GITHUB_JOB}"
260- rm -f /var/run/github-runner -jobs/$${GITHUB_RUN_ID}-$${GITHUB_JOB}.job
261- touch /var/run/github-runner -last-activity
262+ rm -f $$V -jobs/$${GITHUB_RUN_ID}-$${GITHUB_JOB}.job
263+ touch $$V -last-activity
262264EOFC
263265
264- cat > /usr/local/bin/check-runner-termination.sh << ' EOFT '
266+ cat > /usr/local/bin/check-runner-termination.sh << EOFT
265267#!/bin/bash
266268exec >> /tmp/termination-check.log 2>&1
267269source /usr/local/bin/runner-common-functions.sh
268- A="/var/run/github-runner-last-activity"
269- J="/var/run/github-runner-jobs"
270- H="/var/run/github-runner-has-run-job"
271- HOMEDIR="$homedir"
272- TOKEN="$token"
273- [ ! -f "$$A" ] && touch "$$A"
274- L=$$(stat -c %Y "$$A" 2>/dev/null || echo 0)
275- I=$$(($$(date +%s)-L))
276- [ -f "$$H" ] && G=$${RUNNER_GRACE_PERIOD:-60} || G=$${RUNNER_INITIAL_GRACE_PERIOD:-180}
277- R=$$(grep -l '"status":"running"' $$J/*.job 2>/dev/null | wc -l || echo 0)
278- if [ $$R -eq 0 ] && [ $$I -gt $$G ]; then
279- echo "[$$(date)] Terminating: idle $$I > grace $$G"
280- [ -f "$$HOMEDIR/config.sh" ] && cd "$$HOMEDIR" && pkill -INT -f "Runner.Listener" 2>/dev/null || true
281- sleep 2
282- [ -f "$$HOMEDIR/config.sh" ] && RUNNER_ALLOW_RUNASROOT=1 ./config.sh remove --token $$TOKEN
270+ V="/var/run/github-runner"
271+ A="\$ $V -last-activity"
272+ J="\$ $V -jobs"
273+ H="\$ $V -has-run-job"
274+ D="$$ homedir"
275+ T="$token "
276+
277+ [ ! -f "\$ $A " ] && touch "\$ $A "
278+ L=\$ $( stat -c %Y " \$ $A " 2> /dev/null || echo 0)
279+ N=\$ $( date +%s)
280+ I=\$ $(( N- L))
281+ [ -f "\$ $H " ] && G=\$ ${RUNNER_GRACE_PERIOD:- 60} || G=\$ ${RUNNER_INITIAL_GRACE_PERIOD:- 180}
282+ R=\$ $( grep -l ' "status":"running"' \$ $J /* .job 2> /dev/null | wc -l || echo 0)
283+
284+ if [ \$ $R -eq 0 ] && [ \$ $I -gt \$ $G ]; then
285+ log "TERMINATING: idle \$ $I > grace \$ $G "
286+ if [ -f "\$ $D /config.sh" ]; then
287+ cd "\$ $D " && pkill -INT -f "Runner.Listener" 2>/dev/null || true
288+ sleep 2
289+ log "Deregistering runner..."
290+ RUNNER_ALLOW_RUNASROOT=1 ./config.sh remove --token \$ $T 2>&1
291+ log "Deregistration exit: \$ $? "
292+ else
293+ log "ERROR: config.sh not found at \$ $D "
294+ fi
283295 flush_cloudwatch_logs
296+ log "Shutting down"
284297 sudo shutdown -h now
285298else
286- [ $$R -gt 0 ] && echo "[$$(date)] $$ R job(s) running" || echo "[$$(date)] Idle $$I/$$G sec"
299+ [ \ $$R -gt 0 ] && log " \$ $ R job(s) running" || log " Idle \ $$I /\ $$G sec"
287300fi
288301EOFT
289302
@@ -298,10 +311,11 @@ echo "RUNNER_INITIAL_GRACE_PERIOD=$runner_initial_grace_period" >> .env
298311echo " RUNNER_POLL_INTERVAL=$runner_poll_interval " >> .env
299312
300313# Set up job tracking directory
301- mkdir -p /var/run/github-runner-jobs
314+ V=" /var/run/github-runner"
315+ mkdir -p $$ V-jobs
302316
303317# Create initial activity timestamp
304- touch /var/run/github-runner -last-activity
318+ touch $$ V -last-activity
305319
306320# Set up periodic termination check using systemd
307321cat > /etc/systemd/system/runner-termination-check.service << 'EOF '
397411log " Starting runner"
398412# Create marker file for cleanup service
399413touch /var/run/github-runner-started
414+
400415# Ensure CloudWatch agent can read diagnostic logs
401416# The cwagent user needs to traverse into $homedir to reach _diag
402417# Make $homedir world-executable (but not readable) so cwagent can traverse it
0 commit comments