Chancel's blog

252 字 1 分钟阅读

Systemd 服务

  • system

systemd 是 Linux 系统中用于启动和管理服务的初始化系统,提供统一的服务、挂载点和设备管理方式。本文以 mihomo 为例,记录日志配置与服务文件编写。

journald 日志配置

编辑 /etc/systemd/journald.conf,配置日志存储策略(可选):

[Journal]
# 持久化存储(否则重启后日志丢失)
Storage=persistent

# 压缩日志以节省空间
Compress=yes

# 按 UID 拆分日志
SplitMode=uid

# 日志总量限制
SystemMaxUse=1G
SystemKeepFree=500M

# 单个日志文件最大值
SystemMaxFileSize=100M

# 旧日志最长保留时间
MaxRetentionSec=1month

# 转发到传统 syslog
ForwardToSyslog=yes

重启 journald 使配置生效:

systemctl restart systemd-journald

创建服务文件

创建 /etc/systemd/system/mihomo.service

[Unit]
Description=Mihomo Proxy Service
Documentation=https://github.com/MetaCubeX/mihomo
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/mihomo
ExecStart=/opt/mihomo/mihomo-linux-arm64-v1.19.14 -d /opt/mihomo/config
Restart=on-failure
RestartSec=5s
StandardOutput=journal
StandardError=journal
ProtectHome=yes
NoNewPrivileges=yes
PrivateTmp=yes
LimitNOFILE=infinity
LimitNPROC=infinity
TasksMax=infinity

[Install]
WantedBy=multi-user.target

关键参数说明:

参数 作用
Restart=on-failure 进程异常退出时自动重启
ProtectHome=yes 禁止访问 /home 目录
NoNewPrivileges=yes 阻止进程获取额外权限
PrivateTmp=yes 为进程隔离 /tmp/var/tmp
LimitNOFILE=infinity 不限制文件描述符数量

启用并启动服务

systemctl daemon-reload
systemctl enable --now mihomo

检查服务状态:

systemctl status mihomo
journalctl -u mihomo -f

安全加固:使用专用系统用户

root 运行服务存在安全风险。更安全的做法是创建专用系统用户:

useradd --system --no-create-home --shell /usr/sbin/nologin app

然后将服务文件中的 User=root 改为 User=app,并确保 WorkingDirectoryExecStart 路径对该用户有读执行权限。