← 返回首页
🔧

Linux服务管理与systemd

📂 devops ⏱ 2 min 209 words

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的使用,能够实现服务的自动化管理和监控,提高运维效率。