当前位置:首页>Linux>《Linux Server应用日志轮转防止日志沾满磁盘空间》

《Linux Server应用日志轮转防止日志沾满磁盘空间》

  • 2026-10-11 07:13:09
《Linux Server应用日志轮转防止日志沾满磁盘空间》

Linux Server应用日志轮转防止日志沾满磁盘空间

配置独立的日志轮转防止日志沾满磁盘空间,只配置代理服务单独日志,不影响其他服务。如下截图是Proxy服务器日志文件,我们使用代理服务器举例保留7天的日志配置步骤:

一、创建日志文件并设置权限

创建日志文件

sudo touch /etc/sing-box/sing-box.log

设置权限

sudo chmod 644 /etc/sing-box/sing-box.logsudo chown root:root /etc/sing-box/sing-box.log

二、配置sing-box服务文件

sudo nano /etc/systemd/system/sing-box.service编辑sing-box.service追加#关键配置:禁用systemd journal日志StandardOutput=nullStandardError=null

[Unit]Description=sing-box proxy serviceAfter=network.target[Service]Type=simpleUser=rootGroup=rootWorkingDirectory=/etc/sing-boxExecStart=/etc/sing-box/sing-box/sing-box run -c /etc/sing-box/config.jsonRestart=on-failureRestartSec=5# 关键配置:禁用systemd journal日志StandardOutput=nullStandardError=null[Install]WantedBy=multi-user.target

三、配置logrotate日志轮转

sudo nano /etc/logrotate.d/sing-box配置如下

/etc/sing-box/sing-box.log {    daily    rotate 7    compress    delaycompress    missingok    notifempty    copytruncate    create 644 root root    postrotate        # 如果需要重启服务,取消下面一行的注释        # systemctl restart sing-box > /dev/null 2>&1 || true    endscript}

四、应用配置并启动服务

重新加载systemd配置

sudo systemctl daemon-reload

启动服务

sudo systemctl start sing-boxsudo systemctl enable sing-box

检查服务状态

sudo systemctl status sing-box

查看日志文件

sudo tail -f /etc/sing-box/sing-box.log

五、验证配置效果

1. 检查日志是否写入文件

sudo ls -lh /etc/sing-box/sing-box.log

2. 检查systemd journal中没有sing-box日志

sudo journalctl -u sing-box --since "1 minute ago"

3. 测试日志轮转

sudo logrotate -vf /etc/logrotate.d/sing-boxls -lh /etc/sing-box/

配置说明

1. 日志隔离原理

•StandardOutput=null 和 StandardError=null:禁止日志输出到systemd journal

• sing-box配置中的 "output": "/etc/sing-box/sing-box.log":所有日志只写入指定文件

• 完全不影响系统其他服务的日志

2. 日志轮转配置

• daily:每天轮转一次

• rotate 7:保留7天的日志

• compress:压缩旧日志节省空间

• copytruncate:复制后截断,服务无需重启

• create 644 root root:创建新日志文件并设置权限

3. 手动清理命令

查看日志大小

sudo ls -lh /etc/sing-box/sing-box.log

手动触发日志轮转

sudo logrotate -vf /etc/logrotate.d/sing-box

清空当前日志(服务运行时可用)

sudo truncate -s 0 /etc/sing-box/sing-box.log

删除旧日志文件

sudo rm /etc/sing-box/sing-box.log.*

PS:一个文件里放“多个应用”的典型写法:

配置独立的日志轮转(不使用systemd journal)注意要给目录或日志文件权限举例如下

创建代理服务专用的日志目录

sudo mkdir -p /var/log/proxy-servicessudo mkdir -p /var/log/proxy-services/sing-boxsudo mkdir -p /var/log/proxy-services/anytlssudo mkdir -p /var/log/proxy-services/dnsmasq

设置权限

sudo chown -R root:root /var/log/proxy-servicessudo chmod -R 755 /var/log/proxy-services

创建日志文件

sudo touch /var/log/proxy-services/sing-box/sing-box.logsudo touch /var/log/proxy-services/sing-box/access.logsudo touch /var/log/proxy-services/sing-box/error.logsudo chmod 644 /var/log/proxy-services/sing-box/*.log

创建代理服务专用的logrotate配置 ,添加以下内容:

sudo nano /etc/logrotate.d/log-services

# ----- nginx -----/var/log/proxy-services/sing-box/*.log {    daily                      # 每天轮转    rotate 7                   # 保留7天    compress                   # 压缩旧日志    delaycompress              # 延迟一天压缩    missingok                  # 日志文件不存在时不报错    notifempty                 # 空文件不轮转    create 644 root root       # 创建新文件的权限    sharedscripts              # 所有文件轮转后执行一次脚本    postrotate        # 发送USR1信号让sing-box重新打开日志文件        # 如果sing-box不支持USR1信号,则重启服务        if systemctl is-active --quiet sing-box; then            # 尝试发送USR1信号            pkill -USR1 -f "sing-box run" 2>/dev/null || true            # 如果发送信号失败,则重启服务            if [ $? -ne 0 ]; then                systemctl restart sing-box            fi        fi    endscript}# ----- anytls -----/var/log/proxy-services/anytls/*.log {    daily    rotate 3                   # anytls日志较多,只保留3天    compress    delaycompress    missingok    notifempty    create 644 root root    sharedscripts    postrotate        if systemctl is-active --quiet anytls; then            pkill -USR1 -f "anytls-client" 2>/dev/null || true            if [ $? -ne 0 ]; then                systemctl restart anytls            fi        fi    endscript}# ----- dnsmasq -----/var/log/proxy-services/dnsmasq/*.log {    weekly                     # dnsmasq日志较少,每周轮转    rotate 4                   # 保留4周    compress    delaycompress    missingok    notifempty    create 644 root root    sharedscripts    postrotate        if systemctl is-active --quiet dnsmasq; then            systemctl restart dnsmasq        fi    endscript}

注意事项

  1. 1. 日志路径:确保sing-box配置中的路径与文件路径一致
  2. 2. 磁盘空间:定期检查日志文件大小,默认保留7天
  3. 3. 服务重启:修改配置后需要重启服务
  4. 4. 权限问题:确保sing-box进程有权限写入日志文件

这个方案只有4个简单步骤,完全实现了代理服务日志的独立管理,不影响系统其他日志,且自动处理日志轮转。

最新文章

随机文章