Linux服务管理与systemd
Linux服务管理与systemd
systemd简介
systemd是现代Linux系统的初始化系统和服务管理器,取代了传统的SysV init。
服务管理命令
基本操作
# 启动服务
systemctl start nginx
# 停止服务
systemctl stop nginx
# 重启服务
systemctl restart nginx
# 重新加载配置
systemctl reload nginx
# 查看状态
systemctl status nginx
开机自启
# 设置开机自启
systemctl enable nginx
# 取消开机自启
systemctl disable nginx
# 同时启动并设置自启
systemctl enable --now nginx
服务列表
# 查看所有服务
systemctl list-units --type=service
# 查看所有已启用的服务
systemctl list-units --type=service --state=enabled
# 查看所有服务文件
systemctl list-unit-files --type=service
创建自定义服务
服务文件结构
# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
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
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
Environment=NODE_ENV=production
EnvironmentFile=/etc/myapp/env
[Install]
WantedBy=multi-user.target
服务类型
| 类型 | 说明 |
|---|---|
| simple | 主进程就是服务进程 |
| forking | 服务会fork子进程后退出 |
| oneshot | 执行一次后退出 |
| notify | 类似simple,但支持通知 |
| dbus | 通过dbus获得名字 |
| idle | 等待其他任务完成 |
高级配置
[Service]
# 资源限制
LimitNOFILE=65535
LimitNPROC=4096
# 安全选项
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=yes
# 内存限制
MemoryMax=1G
MemoryHigh=512M
# CPU限制
CPUQuota=200%
日志管理
# 查看服务日志
journalctl -u nginx
# 实时跟踪日志
journalctl -u nginx -f
# 查看最近的日志
journalctl -u nginx -n 100
# 查看特定时间段日志
journalctl -u nginx --since "2024-01-01" --until "2024-01-02"
# 清理旧日志
journalctl --vacuum-time=7d
定时任务
使用systemd timer
# /etc/systemd/system/backup.timer
[Unit]
Description=Daily backup timer
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
# /etc/systemd/system/backup.service
[Unit]
Description=Daily backup
[Service]
Type=oneshot
ExecStart=/opt/scripts/backup.sh
# 启用定时器
systemctl enable --now backup.timer
# 查看定时器状态
systemctl list-timers
实践:部署Node.js应用
# 创建应用用户
useradd -r -s /bin/false myapp
# 创建服务文件
cat > /etc/systemd/system/myapp.service << 'EOF'
[Unit]
Description=Node.js Application
After=network.target
[Service]
Type=simple
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node server.js
Restart=always
RestartSec=5
Environment=NODE_ENV=production
Environment=PORT=3000
[Install]
WantedBy=multi-user.target
EOF
# 启用并启动服务
systemctl daemon-reload
systemctl enable --now myapp
总结
systemd是现代Linux系统的核心组件。掌握systemd的使用,能够实现服务的自动化管理和监控,提高运维效率。