Skip to content

Instantly share code, notes, and snippets.

@dmd
Created June 3, 2026 13:20
Show Gist options
  • Select an option

  • Save dmd/a639a876a8cdb35eacc11e3ccd85350d to your computer and use it in GitHub Desktop.

Select an option

Save dmd/a639a876a8cdb35eacc11e3ccd85350d to your computer and use it in GitHub Desktop.
# 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