9688e7e2f8
If ci-backup-template.service is killed mid-run (SIGTERM), the Python finally block that restarts act-runner.service is skipped. A subsequent backup then finds the runner already inactive, _stop_runner returns False, and the finally restart is gated off — leaving the runner down indefinitely (incident: 21 mag 2026, runner stayed off ~80 min). Add ExecStopPost=-/bin/systemctl start act-runner.service so systemd guarantees the runner is restarted regardless of how the unit exits (success, failure, signal). The `-` prefix preserves the unit's own exit status. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
29 lines
915 B
Desktop File
29 lines
915 B
Desktop File
[Unit]
|
|
Description=Local CI/CD — weekly backup of VMware templates
|
|
Documentation=file:///opt/ci/local-ci-cd-system/deploy/systemd/README.md
|
|
After=network-online.target
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
User=root
|
|
EnvironmentFile=/etc/ci/environment
|
|
WorkingDirectory=/opt/ci/local-ci-cd-system
|
|
ExecStart=/opt/ci/venv/bin/python -m ci_orchestrator template backup --all-templates
|
|
# Safety net: bring act-runner.service back up on any exit path (success,
|
|
# failure, signal). The Python `finally` block can be skipped if the
|
|
# service is killed mid-run, and a runner left stopped by a killed
|
|
# backup would cause the next backup to skip the restart too.
|
|
ExecStopPost=-/bin/systemctl start act-runner.service
|
|
TimeoutStartSec=4h
|
|
IOSchedulingClass=best-effort
|
|
IOSchedulingPriority=7
|
|
Nice=19
|
|
ProtectSystem=strict
|
|
ProtectHome=true
|
|
PrivateTmp=true
|
|
NoNewPrivileges=true
|
|
ReadWritePaths=/var/lib/ci
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|