systemd
36
总安装量
17
周安装量
#10382
全站排名
安装命令
npx skills add https://github.com/chaterm/terminal-skills --skill systemd
Agent 安装分布
claude-code
10
codex
9
opencode
8
openclaw
7
github-copilot
6
gemini-cli
6
Skill 文档
Systemd æå¡ç®¡ç
æ¦è¿°
Systemd æå¡åå ç¼åãä¾èµç®¡çãæ¥å¿æ¥ççæè½ã
æå¡ç®¡ç
åºç¡å½ä»¤
# å¯åæå¡
systemctl start service-name
systemctl stop service-name
systemctl restart service-name
systemctl reload service-name # éè½½é
ç½®ï¼ä¸ä¸ææå¡ï¼
# 弿ºå¯å¨
systemctl enable service-name
systemctl disable service-name
systemctl enable --now service-name # å¯ç¨å¹¶ç«å³å¯å¨
# æ¥çç¶æ
systemctl status service-name
systemctl is-active service-name
systemctl is-enabled service-name
systemctl is-failed service-name
æå¡å表
# ååºæææå¡
systemctl list-units --type=service
systemctl list-units --type=service --state=running
systemctl list-units --type=service --state=failed
# ååºææåå
æä»¶
systemctl list-unit-files --type=service
# æ¥çä¾èµ
systemctl list-dependencies service-name
systemctl list-dependencies --reverse service-name
åå æä»¶
æä»¶ä½ç½®
# ç³»ç»åå
ï¼å
管çå¨å®è£
ï¼
/usr/lib/systemd/system/
# 管çåèªå®ä¹
/etc/systemd/system/
# è¿è¡æ¶çæ
/run/systemd/system/
# ä¼å
级ï¼/etc > /run > /usr/lib
åºç¡æå¡åå
# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
Documentation=https://example.com/docs
After=network.target
Wants=network-online.target
[Service]
Type=simple
User=appuser
Group=appgroup
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/start.sh
ExecStop=/opt/myapp/bin/stop.sh
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
æå¡ç±»å
# simpleï¼é»è®¤ï¼- 主è¿ç¨å³æå¡è¿ç¨
Type=simple
ExecStart=/usr/bin/myapp
# forking - ä¼ ç»å®æ¤è¿ç¨
Type=forking
PIDFile=/var/run/myapp.pid
ExecStart=/usr/bin/myapp -d
# oneshot - 䏿¬¡æ§ä»»å¡
Type=oneshot
ExecStart=/usr/bin/backup.sh
RemainAfterExit=yes
# notify - æå¡å°±ç»ªéç¥
Type=notify
ExecStart=/usr/bin/myapp
ç¯å¢åé
[Service]
# ç´æ¥è®¾ç½®
Environment="VAR1=value1" "VAR2=value2"
# 仿件å è½½
EnvironmentFile=/etc/myapp/env
EnvironmentFile=-/etc/myapp/env.local # - 表示å¯é
# ä¼ éç»åè¿ç¨
PassEnvironment=HOME USER
èµæºéå¶
[Service]
# æä»¶æè¿°ç¬¦
LimitNOFILE=65535
# è¿ç¨æ°
LimitNPROC=4096
# å
åéå¶
MemoryLimit=512M
MemoryMax=1G
# CPU éå¶
CPUQuota=50%
# è¶
æ¶è®¾ç½®
TimeoutStartSec=30
TimeoutStopSec=30
å®å ¨é项
[Service]
# ç¨æ·é离
User=appuser
Group=appgroup
DynamicUser=yes
# æä»¶ç³»ç»ä¿æ¤
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/myapp
# ç½ç»é离
PrivateNetwork=yes
# è½åéå¶
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=yes
æ¥å¿ç®¡ç
journalctl
# æ¥çæå¡æ¥å¿
journalctl -u service-name
journalctl -u service-name -f # 宿¶è·è¸ª
journalctl -u service-name --since today
journalctl -u service-name --since "1 hour ago"
journalctl -u service-name -n 100 # æå100è¡
# ææ¶é´èå´
journalctl --since "2024-01-01" --until "2024-01-02"
# æä¼å
级
journalctl -p err # é误å以ä¸
journalctl -p warning
# è¾åºæ ¼å¼
journalctl -u service-name -o json
journalctl -u service-name -o json-pretty
# ç£ç使ç¨
journalctl --disk-usage
journalctl --vacuum-size=500M # æ¸
çå°500M
journalctl --vacuum-time=7d # ä¿ç7天
宿¶å¨
Timer åå
# /etc/systemd/system/backup.timer
[Unit]
Description=Daily Backup Timer
[Timer]
OnCalendar=daily
OnCalendar=*-*-* 02:00:00 # æ¯å¤©åæ¨2ç¹
Persistent=true # éè¿çä»»å¡è¡¥æ§è¡
[Install]
WantedBy=timers.target
# /etc/systemd/system/backup.service
[Unit]
Description=Backup Service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
宿¶å¨ç®¡ç
# å¯ç¨å®æ¶å¨
systemctl enable --now backup.timer
# æ¥ç宿¶å¨
systemctl list-timers
systemctl list-timers --all
常è§åºæ¯
åºæ¯ 1ï¼Node.js åºç¨
[Unit]
Description=Node.js Application
After=network.target
[Service]
Type=simple
User=node
WorkingDirectory=/opt/nodeapp
ExecStart=/usr/bin/node /opt/nodeapp/app.js
Restart=on-failure
RestartSec=10
Environment=NODE_ENV=production
Environment=PORT=3000
[Install]
WantedBy=multi-user.target
åºæ¯ 2ï¼Java åºç¨
[Unit]
Description=Java Application
After=network.target
[Service]
Type=simple
User=java
ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /opt/app/app.jar
SuccessExitStatus=143
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
åºæ¯ 3ï¼è¦çç³»ç»æå¡é ç½®
# å建è¦çç®å½
systemctl edit nginx
# ææå¨å建
mkdir -p /etc/systemd/system/nginx.service.d/
cat > /etc/systemd/system/nginx.service.d/override.conf << EOF
[Service]
LimitNOFILE=65535
EOF
systemctl daemon-reload
systemctl restart nginx
æ éææ¥
| é®é¢ | ææ¥æ¹æ³ |
|---|---|
| æå¡å¯å¨å¤±è´¥ | systemctl status, journalctl -u |
| ä¾èµé®é¢ | systemctl list-dependencies |
| é ç½®é误 | systemd-analyze verify service.service |
| æéé®é¢ | æ£æ¥ User/Groupãæä»¶æé |
| è¶ æ¶ | è°æ´ TimeoutStartSec |
# éè½½é
ç½®
systemctl daemon-reload
# åæå¯å¨æ¶é´
systemd-analyze
systemd-analyze blame
systemd-analyze critical-chain
# éªè¯åå
æä»¶
systemd-analyze verify /etc/systemd/system/myapp.service