252 字 1 分钟阅读
Systemd 服务
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,并确保 WorkingDirectory 和 ExecStart 路径对该用户有读执行权限。