[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PZCFH2W5T998GPEBMCMMMZ":3,"skill-same:01M6PZCFH2W5T998GPEBMCMMMZ":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":28,"commitSha":52,"skillDirectory":53,"forksCount":13,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":56,"install":57,"resources":70},"01M6PZCFH2W5T998GPEBMCMMMZ","systemd-services",null,"Create and manage systemd services and timers. Configure service dependencies and resource limits. Use when managing system services.","duc-duy-1612\u002FOnline-Delivery-Systems-Web","duc-duy-1612","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F192231384?v=4","01M6NSDKQQDKVTHZ8DZMZ1VYY6","01M6NSDKW8DDVTQHBT1HBDDJPT",0,"MIT","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fsystemd-services\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"systemd services","services","systemd","manage","limits","relevant","scripts","critical","os","platform","main","community","security","only","system","configure","access","devops-security","license","create","2026-11-10 10:12:30",false,"---\nname: systemd-services\ndescription: Create and manage systemd services and timers. Configure service dependencies\n  and resource limits. Use when managing system services.\ncategory: devops\nrisk: critical\nsource: https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\nsource_repo: BagelHole\u002FDevOps-Security-Agent-Skills\nsource_type: community\ndate_added: '2026-09-20'\nlicense: MIT\nlicense_source: https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\u002Fblob\u002Fmain\u002FLICENSE\ncompatibility: Requires the relevant OS\u002Fplatform tooling and privileged access where\n  noted. Docs-only; helper scripts and templates not bundled.\nmetadata:\n  author: devops-skills\n  version: '1.0'\n---\n\n# Systemd Services\n\nCreate, manage, and monitor systemd services and timers. Covers unit file authoring, dependency management, socket activation, resource limits, journalctl log analysis, and production hardening.\n\n## When to Use\n\n- Deploying an application as a managed background service\n- Replacing cron jobs with systemd timers for better logging and dependency control\n- Setting up socket activation for on-demand service startup\n- Configuring resource limits (CPU, memory, I\u002FO) for services\n- Debugging service startup failures and runtime crashes\n- Managing service dependencies and ordering\n\n## Prerequisites\n\n- Linux system running systemd (most modern distributions)\n- Root or sudo access for creating system-level unit files\n- Application binary or script to run as a service\n- Understanding of the application's start\u002Fstop lifecycle\n\n## Service Unit File -- Complete Example\n\n```ini\n# \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmyapp.service\n[Unit]\nDescription=MyApp Production Server\nDocumentation=https:\u002F\u002Fdocs.example.com\u002Fmyapp\nAfter=network-online.target postgresql.service\nWants=network-online.target\nRequires=postgresql.service\n\n[Service]\nType=notify\nUser=myapp\nGroup=myapp\nWorkingDirectory=\u002Fopt\u002Fmyapp\n\n# Environment configuration\nEnvironmentFile=\u002Fetc\u002Fmyapp\u002Fenv\nEnvironment=NODE_ENV=production\nEnvironment=PORT=8080\n\n# Execution\nExecStartPre=\u002Fopt\u002Fmyapp\u002Fbin\u002Fmigrate --check\nExecStart=\u002Fopt\u002Fmyapp\u002Fbin\u002Fserver --config \u002Fetc\u002Fmyapp\u002Fconfig.yaml\nExecStartPost=\u002Fopt\u002Fmyapp\u002Fbin\u002Fhealthcheck.sh\nExecReload=\u002Fbin\u002Fkill -HUP $MAINPID\nExecStop=\u002Fopt\u002Fmyapp\u002Fbin\u002Fgraceful-stop.sh\n\n# Restart behavior\nRestart=on-failure\nRestartSec=5\nStartLimitIntervalSec=300\nStartLimitBurst=5\n\n# Timeouts\nTimeoutStartSec=30\nTimeoutStopSec=30\nWatchdogSec=60\n\n# Security hardening\nNoNewPrivileges=true\nProtectSystem=strict\nProtectHome=true\nPrivateTmp=true\nReadWritePaths=\u002Fvar\u002Flib\u002Fmyapp \u002Fvar\u002Flog\u002Fmyapp\nCapabilityBoundingSet=\nAmbientCapabilities=\n\n# Logging\nStandardOutput=journal\nStandardError=journal\nSyslogIdentifier=myapp\n\n[Install]\nWantedBy=multi-user.target\n```\n\n## Service Management Commands\n\n```bash\n# Reload systemd after creating or modifying unit files\nsystemctl daemon-reload\n\n# Start, stop, restart a service\nsystemctl start myapp\nsystemctl stop myapp\nsystemctl restart myapp\n\n# Reload service configuration without restart (if supported)\nsystemctl reload myapp\n\n# Enable service to start on boot\nsystemctl enable myapp\n\n# Enable and start in one command\nsystemctl enable --now myapp\n\n# Disable and stop\nsystemctl disable --now myapp\n\n# Check service status\nsystemctl status myapp\n\n# Check if a service is active, enabled, or failed\nsystemctl is-active myapp\nsystemctl is-enabled myapp\nsystemctl is-failed myapp\n\n# List all running services\nsystemctl list-units --type=service --state=running\n\n# List all failed services\nsystemctl list-units --type=service --state=failed\n\n# Show all properties of a service\nsystemctl show myapp\n\n# Show specific property values\nsystemctl show myapp -p MainPID,MemoryCurrent,CPUUsageNSec\n\n# Mask a service (prevent it from being started at all)\nsystemctl mask myapp\n\n# Unmask\nsystemctl unmask myapp\n\n# Reset a failed service state\nsystemctl reset-failed myapp\n```\n\n## Timer Units (Cron Replacement)\n\n### Timer File\n\n```ini\n# \u002Fetc\u002Fsystemd\u002Fsystem\u002Fbackup.timer\n[Unit]\nDescription=Daily backup timer\n\n[Timer]\n# Run daily at 2:30 AM\nOnCalendar=*-*-* 02:30:00\n# If the system was off at the scheduled time, run when it boots\nPersistent=true\n# Add random delay up to 15 minutes to avoid thundering herd\nRandomizedDelaySec=900\n# Associate with a specific service (defaults to same name .service)\nUnit=backup.service\n\n[Install]\nWantedBy=timers.target\n```\n\n### Corresponding Service File\n\n```ini\n# \u002Fetc\u002Fsystemd\u002Fsystem\u002Fbackup.service\n[Unit]\nDescription=Daily backup job\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=oneshot\nUser=backup\nExecStart=\u002Fusr\u002Flocal\u002Fbin\u002Frun-backup.sh\nStandardOutput=journal\nStandardError=journal\n```\n\n### Timer Management\n\n```bash\n# Common OnCalendar expressions:\n# minutely, hourly, daily, weekly, monthly\n# *-*-* 06:00:00       Daily at 6 AM\n# Mon..Fri *-*-* 09:00 Weekdays at 9 AM\n# *:0\u002F15               Every 15 minutes\n\n# Validate calendar expressions\nsystemd-analyze calendar \"Mon..Fri *-*-* 09:00\"\n\n# List all active timers\nsystemctl list-timers --all\n\n# Enable and start a timer\nsystemctl enable --now backup.timer\n\n# Run the associated service immediately (for testing)\nsystemctl start backup.service\n```\n\n## Socket Activation\n\n```ini\n# \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmyapp.socket\n[Unit]\nDescription=MyApp Socket\n\n[Socket]\nListenStream=8080\nAccept=no\n# Optionally bind to a specific IP\n# ListenStream=10.0.1.10:8080\n\n[Install]\nWantedBy=sockets.target\n```\n\n```ini\n# \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmyapp.service\n[Unit]\nDescription=MyApp Server\nRequires=myapp.socket\n\n[Service]\nType=notify\nUser=myapp\nExecStart=\u002Fopt\u002Fmyapp\u002Fbin\u002Fserver\n# Service receives the socket file descriptor from systemd\n\n[Install]\nWantedBy=multi-user.target\n```\n\n```bash\n# Enable the socket (service starts on first connection)\nsystemctl enable --now myapp.socket\n\n# Check socket status\nsystemctl status myapp.socket\n\n# List all listening sockets\nsystemctl list-sockets\n```\n\n## Dependency Management\n\n```bash\n# Key [Unit] directives for ordering and dependencies:\n# After=            Start after these units (ordering only)\n# Requires=         Hard dependency -- fail if this unit cannot start\n# Wants=            Soft dependency -- try to start, don't fail if unavailable\n# PartOf=           Stop this unit when the parent stops\n# Conflicts=        Cannot run alongside this unit\n\n# Visualize the dependency tree for a service\nsystemctl list-dependencies myapp\n\n# Show reverse dependencies (who depends on this unit)\nsystemctl list-dependencies myapp --reverse\n\n# Analyze boot order for a service\nsystemd-analyze critical-chain myapp.service\n```\n\n## Resource Limits (cgroups v2)\n\n```ini\n# \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmyapp.service.d\u002Flimits.conf\n# (drop-in override file)\n[Service]\n# Memory limits\nMemoryMax=1G\nMemoryHigh=768M\n\n# CPU limits\nCPUQuota=200%          # Up to 2 full CPU cores\nCPUWeight=100          # Relative weight (default=100)\n\n# I\u002FO limits\nIOWeight=50\nIOReadBandwidthMax=\u002Fdev\u002Fsda 100M\nIOWriteBandwidthMax=\u002Fdev\u002Fsda 50M\n\n# Process limits\nLimitNOFILE=65535\nLimitNPROC=4096\nTasksMax=512\n\n# Disable OOM killer (let the app handle it)\nOOMPolicy=continue\n```\n\n```bash\n# Apply drop-in overrides without editing the main unit file\nmkdir -p \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmyapp.service.d\u002F\n\ncat \u003C\u003C'EOF' > \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmyapp.service.d\u002Flimits.conf\n[Service]\nMemoryMax=1G\nCPUQuota=200%\nEOF\n\nsystemctl daemon-reload\nsystemctl restart myapp\n\n# View current resource usage for a service\nsystemctl status myapp                  # Shows Memory and CPU\nsystemd-cgtop                          # Real-time cgroup resource usage\n\n# Edit a service's overrides interactively\nsystemctl edit myapp\n# This creates a drop-in file automatically\n```\n\n## Journalctl Log Analysis\n\n```bash\n# Follow logs for a service in real time\njournalctl -u myapp -f\n\n# Show logs since last boot\njournalctl -u myapp -b\n\n# Show logs for a specific time range\njournalctl -u myapp --since \"2025-01-15 08:00\" --until \"2025-01-15 12:00\"\n\n# Show only error and above\njournalctl -u myapp -p err\n\n# Show the last 100 lines with full messages (no truncation)\njournalctl -u myapp -n 100 --no-pager -l\n\n# Show logs in JSON format (for parsing)\njournalctl -u myapp -o json-pretty --no-pager | head -50\n\n# Check journal disk usage and vacuum old entries\njournalctl --disk-usage\njournalctl --rotate\njournalctl --vacuum-time=7d\njournalctl --vacuum-size=500M\n```\n\n## Troubleshooting\n\n| Symptom | Diagnostic Command | Common Fix |\n|---|---|---|\n| Service fails to start | `systemctl status myapp`, `journalctl -u myapp -n 50` | Check ExecStart path, permissions, config syntax |\n| Service keeps restarting | `journalctl -u myapp --since \"5 min ago\"` | Check StartLimitBurst; look for crash in logs |\n| \"Main process exited, code=exited, status=217\" | `journalctl -u myapp` | User or group in unit file does not exist |\n| \"Failed to set up mount namespacing\" | Check ProtectSystem\u002FPrivateTmp | Kernel too old or SELinux blocking; relax directives |\n| Timer not firing | `systemctl list-timers`, `systemctl status backup.timer` | Ensure timer is enabled; validate OnCalendar expression |\n| Service starts before dependency | Check After= and Requires= | Add `After=dependency.service` for ordering |\n| OOM killed | `journalctl -k \\| grep oom`, `dmesg` | Increase MemoryMax or optimize application memory |\n| Cannot bind to port 80 | Check AmbientCapabilities | Add `CAP_NET_BIND_SERVICE` or use a higher port |\n\n## Related Skills\n\n- `linux-administration` -- General system administration context\n- `performance-tuning` -- Kernel tuning and resource optimization\n- `user-management` -- Service accounts and permissions\n- `backup-recovery` -- Scheduling backups with systemd timers\n\n## Limitations\n\n- Infrastructure commands can disrupt services: confirm target host\u002Fscope and have backups\u002Fsnapshots before mutating state.\n- Docs-only import: upstream scripts and templates not bundled.\n\n","# Systemd Services\n\nCreate, manage, and monitor systemd services and timers. Covers unit file authoring, dependency management, socket activation, resource limits, journalctl log analysis, and production hardening.\n\n## When to Use\n\n- Deploying an application as a managed background service\n- Replacing cron jobs with systemd timers for better logging and dependency control\n- Setting up socket activation for on-demand service startup\n- Configuring resource limits (CPU, memory, I\u002FO) for services\n- Debugging service startup failures and runtime crashes\n- Managing service dependencies and ordering\n\n## Prerequisites\n\n- Linux system running systemd (most modern distributions)\n- Root or sudo access for creating system-level unit files\n- Application binary or script to run as a service\n- Understanding of the application's start\u002Fstop lifecycle\n\n## Service Unit File -- Complete Example\n\n```ini\n# \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmyapp.service\n[Unit]\nDescription=MyApp Production Server\nDocumentation=https:\u002F\u002Fdocs.example.com\u002Fmyapp\nAfter=network-online.target postgresql.service\nWants=network-online.target\nRequires=postgresql.service\n\n[Service]\nType=notify\nUser=myapp\nGroup=myapp\nWorkingDirectory=\u002Fopt\u002Fmyapp\n\n# Environment configuration\nEnvironmentFile=\u002Fetc\u002Fmyapp\u002Fenv\nEnvironment=NODE_ENV=production\nEnvironment=PORT=8080\n\n# Execution\nExecStartPre=\u002Fopt\u002Fmyapp\u002Fbin\u002Fmigrate --check\nExecStart=\u002Fopt\u002Fmyapp\u002Fbin\u002Fserver --config \u002Fetc\u002Fmyapp\u002Fconfig.yaml\nExecStartPost=\u002Fopt\u002Fmyapp\u002Fbin\u002Fhealthcheck.sh\nExecReload=\u002Fbin\u002Fkill -HUP $MAINPID\nExecStop=\u002Fopt\u002Fmyapp\u002Fbin\u002Fgraceful-stop.sh\n\n# Restart behavior\nRestart=on-failure\nRestartSec=5\nStartLimitIntervalSec=300\nStartLimitBurst=5\n\n# Timeouts\nTimeoutStartSec=30\nTimeoutStopSec=30\nWatchdogSec=60\n\n# Security hardening\nNoNewPrivileges=true\nProtectSystem=strict\nProtectHome=true\nPrivateTmp=true\nReadWritePaths=\u002Fvar\u002Flib\u002Fmyapp \u002Fvar\u002Flog\u002Fmyapp\nCapabilityBoundingSet=\nAmbientCapabilities=\n\n# Logging\nStandardOutput=journal\nStandardError=journal\nSyslogIdentifier=myapp\n\n[Install]\nWantedBy=multi-user.target\n```\n\n## Service Management Commands\n\n```bash\n# Reload systemd after creating or modifying unit files\nsystemctl daemon-reload\n\n# Start, stop, restart a service\nsystemctl start myapp\nsystemctl stop myapp\nsystemctl restart myapp\n\n# Reload service configuration without restart (if supported)\nsystemctl reload myapp\n\n# Enable service to start on boot\nsystemctl enable myapp\n\n# Enable and start in one command\nsystemctl enable --now myapp\n\n# Disable and stop\nsystemctl disable --now myapp\n\n# Check service status\nsystemctl status myapp\n\n# Check if a service is active, enabled, or failed\nsystemctl is-active myapp\nsystemctl is-enabled myapp\nsystemctl is-failed myapp\n\n# List all running services\nsystemctl list-units --type=service --state=running\n\n# List all failed services\nsystemctl list-units --type=service --state=failed\n\n# Show all properties of a service\nsystemctl show myapp\n\n# Show specific property values\nsystemctl show myapp -p MainPID,MemoryCurrent,CPUUsageNSec\n\n# Mask a service (prevent it from being started at all)\nsystemctl mask myapp\n\n# Unmask\nsystemctl unmask myapp\n\n# Reset a failed service state\nsystemctl reset-failed myapp\n```\n\n## Timer Units (Cron Replacement)\n\n### Timer File\n\n```ini\n# \u002Fetc\u002Fsystemd\u002Fsystem\u002Fbackup.timer\n[Unit]\nDescription=Daily backup timer\n\n[Timer]\n# Run daily at 2:30 AM\nOnCalendar=*-*-* 02:30:00\n# If the system was off at the scheduled time, run when it boots\nPersistent=true\n# Add random delay up to 15 minutes to avoid thundering herd\nRandomizedDelaySec=900\n# Associate with a specific service (defaults to same name .service)\nUnit=backup.service\n\n[Install]\nWantedBy=timers.target\n```\n\n### Corresponding Service File\n\n```ini\n# \u002Fetc\u002Fsystemd\u002Fsystem\u002Fbackup.service\n[Unit]\nDescription=Daily backup job\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=oneshot\nUser=backup\nExecStart=\u002Fusr\u002Flocal\u002Fbin\u002Frun-backup.sh\nStandardOutput=journal\nStandardError=journal\n```\n\n### Timer Management\n\n```bash\n# Common OnCalendar expressions:\n# minutely, hourly, daily, weekly, monthly\n# *-*-* 06:00:00       Daily at 6 AM\n# Mon..Fri *-*-* 09:00 Weekdays at 9 AM\n# *:0\u002F15               Every 15 minutes\n\n# Validate calendar expressions\nsystemd-analyze calendar \"Mon..Fri *-*-* 09:00\"\n\n# List all active timers\nsystemctl list-timers --all\n\n# Enable and start a timer\nsystemctl enable --now backup.timer\n\n# Run the associated service immediately (for testing)\nsystemctl start backup.service\n```\n\n## Socket Activation\n\n```ini\n# \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmyapp.socket\n[Unit]\nDescription=MyApp Socket\n\n[Socket]\nListenStream=8080\nAccept=no\n# Optionally bind to a specific IP\n# ListenStream=10.0.1.10:8080\n\n[Install]\nWantedBy=sockets.target\n```\n\n```ini\n# \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmyapp.service\n[Unit]\nDescription=MyApp Server\nRequires=myapp.socket\n\n[Service]\nType=notify\nUser=myapp\nExecStart=\u002Fopt\u002Fmyapp\u002Fbin\u002Fserver\n# Service receives the socket file descriptor from systemd\n\n[Install]\nWantedBy=multi-user.target\n```\n\n```bash\n# Enable the socket (service starts on first connection)\nsystemctl enable --now myapp.socket\n\n# Check socket status\nsystemctl status myapp.socket\n\n# List all listening sockets\nsystemctl list-sockets\n```\n\n## Dependency Management\n\n```bash\n# Key [Unit] directives for ordering and dependencies:\n# After=            Start after these units (ordering only)\n# Requires=         Hard dependency -- fail if this unit cannot start\n# Wants=            Soft dependency -- try to start, don't fail if unavailable\n# PartOf=           Stop this unit when the parent stops\n# Conflicts=        Cannot run alongside this unit\n\n# Visualize the dependency tree for a service\nsystemctl list-dependencies myapp\n\n# Show reverse dependencies (who depends on this unit)\nsystemctl list-dependencies myapp --reverse\n\n# Analyze boot order for a service\nsystemd-analyze critical-chain myapp.service\n```\n\n## Resource Limits (cgroups v2)\n\n```ini\n# \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmyapp.service.d\u002Flimits.conf\n# (drop-in override file)\n[Service]\n# Memory limits\nMemoryMax=1G\nMemoryHigh=768M\n\n# CPU limits\nCPUQuota=200%          # Up to 2 full CPU cores\nCPUWeight=100          # Relative weight (default=100)\n\n# I\u002FO limits\nIOWeight=50\nIOReadBandwidthMax=\u002Fdev\u002Fsda 100M\nIOWriteBandwidthMax=\u002Fdev\u002Fsda 50M\n\n# Process limits\nLimitNOFILE=65535\nLimitNPROC=4096\nTasksMax=512\n\n# Disable OOM killer (let the app handle it)\nOOMPolicy=continue\n```\n\n```bash\n# Apply drop-in overrides without editing the main unit file\nmkdir -p \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmyapp.service.d\u002F\n\ncat \u003C\u003C'EOF' > \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmyapp.service.d\u002Flimits.conf\n[Service]\nMemoryMax=1G\nCPUQuota=200%\nEOF\n\nsystemctl daemon-reload\nsystemctl restart myapp\n\n# View current resource usage for a service\nsystemctl status myapp                  # Shows Memory and CPU\nsystemd-cgtop                          # Real-time cgroup resource usage\n\n# Edit a service's overrides interactively\nsystemctl edit myapp\n# This creates a drop-in file automatically\n```\n\n## Journalctl Log Analysis\n\n```bash\n# Follow logs for a service in real time\njournalctl -u myapp -f\n\n# Show logs since last boot\njournalctl -u myapp -b\n\n# Show logs for a specific time range\njournalctl -u myapp --since \"2025-01-15 08:00\" --until \"2025-01-15 12:00\"\n\n# Show only error and above\njournalctl -u myapp -p err\n\n# Show the last 100 lines with full messages (no truncation)\njournalctl -u myapp -n 100 --no-pager -l\n\n# Show logs in JSON format (for parsing)\njournalctl -u myapp -o json-pretty --no-pager | head -50\n\n# Check journal disk usage and vacuum old entries\njournalctl --disk-usage\njournalctl --rotate\njournalctl --vacuum-time=7d\njournalctl --vacuum-size=500M\n```\n\n## Troubleshooting\n\n| Symptom | Diagnostic Command | Common Fix |\n|---|---|---|\n| Service fails to start | `systemctl status myapp`, `journalctl -u myapp -n 50` | Check ExecStart path, permissions, config syntax |\n| Service keeps restarting | `journalctl -u myapp --since \"5 min ago\"` | Check StartLimitBurst; look for crash in logs |\n| \"Main process exited, code=exited, status=217\" | `journalctl -u myapp` | User or group in unit file does not exist |\n| \"Failed to set up mount namespacing\" | Check ProtectSystem\u002FPrivateTmp | Kernel too old or SELinux blocking; relax directives |\n| Timer not firing | `systemctl list-timers`, `systemctl status backup.timer` | Ensure timer is enabled; validate OnCalendar expression |\n| Service starts before dependency | Check After= and Requires= | Add `After=dependency.service` for ordering |\n| OOM killed | `journalctl -k \\| grep oom`, `dmesg` | Increase MemoryMax or optimize application memory |\n| Cannot bind to port 80 | Check AmbientCapabilities | Add `CAP_NET_BIND_SERVICE` or use a higher port |\n\n## Related Skills\n\n- `linux-administration` -- General system administration context\n- `performance-tuning` -- Kernel tuning and resource optimization\n- `user-management` -- Service accounts and permissions\n- `backup-recovery` -- Scheduling backups with systemd timers\n\n## Limitations\n\n- Infrastructure commands can disrupt services: confirm target host\u002Fscope and have backups\u002Fsnapshots before mutating state.\n- Docs-only import: upstream scripts and templates not bundled.\n\n",{"name":5,"risk":25,"source":43,"license":14,"category":44,"metadata":45,"date_added":48,"description":7,"source_repo":49,"source_type":29,"compatibility":50,"license_source":51},"https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills","devops",{"author":46,"version":47},"devops-skills","1.0","2026-09-20","BagelHole\u002FDevOps-Security-Agent-Skills","Requires the relevant OS\u002Fplatform tooling and privileged access where noted. Docs-only; helper scripts and templates not bundled.","https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\u002Fblob\u002Fmain\u002FLICENSE","f3312ba749561b6159f477dbfc9313c875d40a56",".agents\u002Fskills_archive\u002Fsystemd-services","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612","2026-10-25 23:50:58",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill systemd-services",{"tool":63,"command":64},"bunx","bunx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill systemd-services",{"tool":66,"command":67},"pnpm","pnpm dlx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill systemd-services","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fsystemd-services\u002FSKILL.md",true,[],[72,94,118,142,170,194],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":83,"publishedAt":38},"01M6Q0FA5FZ410Z33Z3TFQ4DBA","zero-trust","Implement zero-trust network architecture. Configure identity-based access, micro-segmentation, and continuous verification. Use when implementing modern security architectures.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fzero-trust\u002FSKILL.md",[78],{"categoryNo":79,"categoryName":80,"taxonomyType":81,"taxonomyTypeDesc":82},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[84,85,86,87,88,89,74,90,35,34,33,31,29,28,91,25,92,24,23,93],"ZeRO","trust","zero trust","architecture","assessment","verification","segmentation","active","scope","implementing",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":38},"01M6Q0F1YZJW3KX5FBKEVZ8CV4","zcode-delegate","Delegate coding tasks to the Z.AI ZCode CLI only when the user explicitly requests it, while the orchestrator retains review and landing responsibility.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fzcode-delegate\u002FSKILL.md",[],[101,102,103,104,105,106,107,108,109,110,111,112,113,31,114,29,115,116,25,117],"delegate","zcode","zcode delegate","review","cli","orchestration","tasks","run","Bash","model","node","read","orchestrator","files","desktop app","app","agent-orchestration",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":38},"01M6Q0ETK41VGNMYEXW0T00AJN","youtube-transcript","Fetch YouTube transcripts through DeepAPI or local fallback tooling and save clean text output.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-transcript\u002FSKILL.md",[],[125,126,127,128,129,130,131,36,132,133,134,135,136,29,28,137,138,139,140,141],"transcript","youtube transcript","youtube","safe","github","codex","research","https","text","fetch","tooling","clean","local","output","deepapi","youtube transcripts","blob",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":159,"publishedAt":38},"01M6Q0EPPH2PVMDW40017F8WX0","youtube-transcript-skills","Fetch YouTube video transcripts, search videos\u002Fchannels, browse channels, and extract playlists via the getyoutubetranscript.com API - free tier, no card required.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-transcript-skills\u002FSKILL.md",[148,151,154],{"categoryNo":149,"categoryName":150,"taxonomyType":81,"taxonomyTypeDesc":82},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":152,"categoryName":153,"taxonomyType":81,"taxonomyTypeDesc":82},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":155,"categoryName":156,"taxonomyType":157,"taxonomyTypeDesc":158},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[125,126,127,160,128,161,129,130,36,162,163,164,165,134,166,29,28,167,168,169],"youtube transcript skills","gemini","search","api","Video","browse","api-integration","free","card","channels",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":180,"publishedAt":38},"01M6Q0EAB96PX83W5PTE8A0R8D","youtube-notetaker","Turn YouTube talks into local study notes with slides, transcripts, editable annotations, and a markdown-backed viewer.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-notetaker\u002FSKILL.md",[176,179],{"categoryNo":177,"categoryName":178,"taxonomyType":81,"taxonomyTypeDesc":82},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":152,"categoryName":153,"taxonomyType":81,"taxonomyTypeDesc":82},[127,181,182,105,128,183,184,185,186,36,164,187,188,189,190,28,191,137,192,193],"youtube notetaker","notetaker","workflow","official","notes","code","markdown","slides","annotations","README","study","dair-academy","viewer",{"skillNo":195,"name":196,"nameZh":6,"description":197,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":198,"categories":199,"keywords":201,"publishedAt":38},"01M6Q0E55F0GW5MX48V8HXS8B5","youtube-full","Fetch YouTube transcripts, search videos, browse channels, and extract playlists via TranscriptAPI — no yt-dlp, no Google API key, works from any cloud server.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-full\u002FSKILL.md",[200],{"categoryNo":149,"categoryName":150,"taxonomyType":81,"taxonomyTypeDesc":82},[202,127,203,204,128,161,162,205,206,163,164,165,134,207,166,29,28,167,208,140],"youtube full","full","google","server","dlp","credits","automatic"]