Systemd Command Cheatsheet
Essential systemd commands for service management
DevOps
Systemd Command Cheatsheet
A comprehensive reference for systemd service management.
Service Management
Basic Commands
systemctl start service # Start service
systemctl stop service # Stop service
systemctl restart service # Restart service
systemctl reload service # Reload config without restart
systemctl status service # Show service status
systemctl enable service # Enable at boot
systemctl disable service # Disable at boot
systemctl is-active service # Check if running
systemctl is-enabled service # Check if enabledList Services
systemctl list-units # List all units
systemctl list-units --type=service # List services only
systemctl list-units --state=running # List running units
systemctl list-units --failed # List failed units
systemctl list-unit-files # List all unit filesUnit Files
Service Unit File
# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
After=network.target
[Service]
Type=simple
User=myuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node /opt/myapp/server.js
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.targetService Types
Type=simple # Default, main process
Type=forking # Forks and exits
Type=oneshot # Runs once and exits
Type=notify # Sends notification when ready
Type=idle # Delays until other jobs finishRestart Options
Restart=no # Don't restart
Restart=always # Always restart
Restart=on-failure # Restart on failure
Restart=on-abnormal # Restart on abnormal exit
RestartSec=5 # Wait 5 seconds before restartJournalctl (Logs)
View Logs
journalctl # All logs
journalctl -u service # Service logs
journalctl -u service -f # Follow logs
journalctl -u service --since today # Today's logs
journalctl -u service --since "2024-01-01" # Since date
journalctl -u service --since "1 hour ago" # Last hour
journalctl -u service -n 50 # Last 50 lines
journalctl -u service -p err # Error level only
journalctl -k # Kernel messages
journalctl -b # Current boot
journalctl -b -1 # Previous bootLog Management
journalctl --disk-usage # Show disk usage
journalctl --vacuum-size=100M # Limit to 100MB
journalctl --vacuum-time=2weeks # Keep 2 weeksTimers
Timer Unit File
# /etc/systemd/system/backup.timer
[Unit]
Description=Daily Backup Timer
[Timer]
OnCalendar=daily
OnCalendar=*-*-* 02:00:00 # 2 AM daily
Persistent=true
[Install]
WantedBy=timers.targetTimer Commands
systemctl list-timers # List all timers
systemctl list-timers --all # Include inactive
systemctl start timer # Start timer
systemctl enable timer # Enable timerTimer Syntax
OnCalendar=hourly # Every hour
OnCalendar=daily # Every day
OnCalendar=weekly # Every week
OnCalendar=monthly # Every month
OnCalendar=*-*-* 00:00:00 # Midnight
OnCalendar=Mon *-*-* 00:00:00 # Monday midnight
OnBootSec=15min # 15 min after boot
OnUnitActiveSec=1h # 1 hour after last activationSystem Control
Power Management
systemctl poweroff # Shutdown
systemctl reboot # Reboot
systemctl suspend # Suspend
systemctl hibernate # HibernateSystem State
systemctl get-default # Show default target
systemctl set-default multi-user.target # Set default target
systemctl isolate multi-user.target # Switch to target
systemctl list-dependencies # Show dependenciesTargets
Common Targets
systemctl isolate rescue.target # Rescue mode
systemctl isolate multi-user.target # Multi-user (no GUI)
systemctl isolate graphical.target # Graphical modeConfiguration
Reload Systemd
systemctl daemon-reload # Reload unit files
systemctl reset-failed # Reset failed unitsEdit Unit Files
systemctl edit service # Create override
systemctl edit --full service # Edit full file
systemctl cat service # Show unit fileOverride Example
# /etc/systemd/system/service.service.d/override.conf
[Service]
Environment="VAR=value"Environment Variables
Set Environment
[Service]
Environment="VAR1=value1"
Environment="VAR2=value2"
EnvironmentFile=/etc/myapp/envResource Limits
Limit Resources
[Service]
MemoryLimit=512M
CPUQuota=50%
TasksMax=100
LimitNOFILE=65536Dependencies
Unit Dependencies
[Unit]
Requires=network.target # Hard dependency
Wants=network.target # Soft dependency
After=network.target # Start after
Before=network.target # Start before
Conflicts=other.service # Cannot run togetherTroubleshooting
Debug Service
systemctl status service -l # Full status
journalctl -u service -xe # Extended logs
systemctl show service # Show all properties
systemctl list-dependencies service # Show dependenciesCommon Issues
# Permission denied
sudo systemctl status service
# Unit not found
systemctl daemon-reload
# Failed to start
journalctl -u service -n 50Quick Reference
| Command | Description |
|---|---|
systemctl start <service> | Start service |
systemctl stop <service> | Stop service |
systemctl restart <service> | Restart service |
systemctl status <service> | Service status |
systemctl enable <service> | Enable at boot |
journalctl -u <service> | View logs |
journalctl -f | Follow logs |
systemctl daemon-reload | Reload configs |
Best Practices
- Use systemd for all services
- Enable services for auto-start
- Set restart policies for reliability
- Use timers instead of cron
- Monitor logs with journalctl
- Set resource limits to prevent abuse
- Use dependencies correctly
- Test services before enabling
- Document custom units
- Keep logs manageable with vacuum
Resources
- Systemd Manual: https://www.freedesktop.org/software/systemd/man/
- ArchWiki Systemd: https://wiki.archlinux.org/title/Systemd
- Digital Ocean Guide: https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal

