Skill detail
systemd-services
Relevant server operations specialty, but limited to systemd service management.
Inspect before use
Automated review checks relevance, not safety or endorsement. Read the source instructions before using this skill.
SKILL.md
The saved excerpt is a snapshot from review. The external source remains the complete and most current version.
--- name: systemd-services description: Create and manage systemd services and timers. Configure service dependencies and resource limits. Use when managing system services. license: MIT metadata: author: devops-skills version: "1.0" --- # Systemd Services Create, manage, and monitor systemd services and timers. Covers unit file authoring, dependency management, socket activation, resource limits, journalctl log analysis, and production hardening. ## When to Use - Deploying an application as a managed background service - Replacing cron jobs with systemd timers for better logging and dependency control - Setting up socket activation for on-demand service startup - Configuring resource limits (CPU, memory, I/O) for services - Debugging service startup failures and runtime crashes - Managing service dependencies and ordering ## Prerequisites - Linux system running systemd (most modern distributions) - Root or sudo access for creating system-level unit files - Application binary or script to run as a service - Understanding of the application's start/stop lifecycle ## Service Unit File -- Complete Example ```ini # /etc/systemd/system/myapp.service [Unit] Description=MyApp Production Server Documentation=https://docs.example.com/myapp After=network-online.target postgresql.service Wants=network-online.target Requires=postgresql.service [Service] Type=notify User=myapp Group=myapp WorkingDirectory=/opt/myapp # Environment configuration EnvironmentFile=/etc/myapp/env Environment=NODE_ENV=production Environment=PORT=8080 # Execution ExecStartPre=/opt/myapp/bin/migrate --check ExecStart=/opt/myapp/bin/server --config /etc/myapp/config.yaml ExecStartPost=/opt/myapp/bin/healthcheck.sh ExecReload=/bin/kill -HUP $MAINPID ExecStop=/opt/myapp/bin/graceful-stop.sh # Restart behavior Restart=on-failure RestartSec=5 StartLimitIntervalSec=300 StartLimitBurst=5 # Timeouts TimeoutStartSec=30 TimeoutStopSec=30 WatchdogSec=60 # Security hardening NoNewPrivileges=true ProtectSystem=strict ProtectHome=true PrivateTmp=true ReadWritePaths=/var/lib/myapp /var/log/myapp CapabilityBoundingSet= AmbientCapabilities= # Logging StandardOutput=journal StandardError=journal SyslogIdentifier=myapp [Install] WantedBy=multi-user.target ``` ## Service Management Commands ```bash # Reload systemd after creating or modifying unit files systemctl daemon-reload # Start, stop, restart a service systemctl start myapp systemctl stop myapp systemctl restart myapp # Reload service configuration without restart (if supported) systemctl reload myapp # Enable service to start on boot systemctl enable myapp # Enable and start in one command systemctl enable --now myapp # Disable and stop systemctl disable --now myapp # Check service status systemctl status myapp # Check if a service is active, enabled, or failed systemctl is-active myapp systemctl is-enabled myapp systemctl is-failed myapp # List all running services systemctl list-units --type=service --state=running # List all failed services systemctl list-units --type=service --state=failed # Show all properties of a service systemctl show myapp # Show specific property values systemctl show myapp -p MainPID,MemoryCurrent,CPUUsageNSec # Mask a service (prevent it from being started at all) systemctl mask myapp # Unmask systemctl unmask myapp # Reset a failed service state systemctl reset-failed myapp ``` ## Timer Units (Cron Replacement) ### Timer File ```ini # /etc/systemd/system/backup.timer [Unit] Description=Daily backup timer [Timer] # Run daily at 2:30 AM OnCalendar=*-*-* 02:30:00 # If the system was off at the scheduled time, run when it boots Persistent=true # Add random delay up to 15 minutes to avoid thundering herd RandomizedDelaySec=900 # Associate with a specific service (defaults to same name .service) Unit=backup.service [Install] WantedBy=timers.target ``` ### Corresponding Service File ```ini # /etc/systemd/system/backup.service [Unit] Description=Daily backup jobRead the full source on GitHub (opens external page)