Skill 详情
systemd-services
Relevant server operations specialty, but limited to systemd service management.
使用前先检查
自动化审核只检查相关性,不代表安全审查或推荐。使用前请阅读来源中的说明。
SKILL.md
这段内容是审核时保存的快照。外部来源才是完整且最新的版本。
--- 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 job在 GitHub 阅读完整来源 (打开外部页面)