Created
June 3, 2026 13:20
-
-
Save dmd/a639a876a8cdb35eacc11e3ccd85350d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Systemd timer management for scandium | |
| # Run from scandium:~/timers/ | |
| user_ctl := "systemctl --user" | |
| # Show available commands | |
| default: | |
| @just --list | |
| # List all timers with next fire time | |
| timers: | |
| {{user_ctl}} list-timers --all --no-pager | |
| # Show status of all services (success/failure) | |
| status: | |
| @for svc in ~/.config/systemd/user/*.service; do \ | |
| name=$(basename "$svc"); \ | |
| case "$name" in *@.service) continue;; esac; \ | |
| result=$(systemctl --user show -p ActiveState -p SubState -p Result "$name" 2>/dev/null); \ | |
| state=$(echo "$result" | grep ActiveState | cut -d= -f2); \ | |
| sub=$(echo "$result" | grep SubState | cut -d= -f2); \ | |
| res=$(echo "$result" | grep "^Result" | cut -d= -f2); \ | |
| if [ "$res" = "success" ]; then \ | |
| printf "✓ %s\n" "$name"; \ | |
| elif [ "$state" = "inactive" ] && [ "$res" = "" ]; then \ | |
| printf "· %s (never ran)\n" "$name"; \ | |
| else \ | |
| printf "✗ %s (%s)\n" "$name" "$res"; \ | |
| fi; \ | |
| done | |
| # Show only failed services | |
| failed: | |
| {{user_ctl}} list-units --type=service --state=failed --no-pager | |
| # Show logs for a service (e.g., just logs sshifts-sync) | |
| logs service: | |
| journalctl --user -u {{service}}.service --no-pager -n 50 | |
| # Follow logs for a service in real time | |
| follow service: | |
| journalctl --user -u {{service}}.service -f | |
| # Show detailed status for a service | |
| info service: | |
| {{user_ctl}} status {{service}}.service {{service}}.timer 2>&1 || true | |
| # Manually trigger a service | |
| run service: | |
| {{user_ctl}} start {{service}}.service && sleep 2 && {{user_ctl}} status {{service}}.service --no-pager | |
| # Restart a failed service (reset failure state + run) | |
| retry service: | |
| {{user_ctl}} reset-failed {{service}}.service 2>/dev/null; {{user_ctl}} start {{service}}.service && sleep 2 && {{user_ctl}} status {{service}}.service --no-pager | |
| # Reset all failed states | |
| reset-failed: | |
| {{user_ctl}} reset-failed | |
| # Deploy: copy unit files into place and reload | |
| deploy: | |
| cp *.service *.timer ~/.config/systemd/user/ | |
| cp scandium.conf ~/.config/environment.d/scandium.conf | |
| {{user_ctl}} daemon-reload | |
| @echo "Deployed. Enable new timers with: just enable <name>" | |
| # Enable and start a timer | |
| enable service: | |
| {{user_ctl}} enable --now {{service}}.timer | |
| # Disable a timer | |
| disable service: | |
| {{user_ctl}} disable --now {{service}}.timer | |
| # Show the environment systemd sees | |
| env: | |
| {{user_ctl}} show-environment | |
| # Reload systemd daemon (after editing unit files) | |
| reload: | |
| {{user_ctl}} daemon-reload |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment