
执行下面的命令一次设置好(中途需要输入 Y 继续);如果要改其他大小,改下面的SystemMaxUse=100M为你想要的日志大小就行:
#!/bin/bash
echo "=== 限制systemd日志大小到100M ==="
echo ""
# 显示当前日志占用
echo "当前systemd日志占用:"
journalctl --disk-usage
echo ""
echo "日志文件位置占用:"
du -sh /var/log/journal/ 2>/dev/null || echo "使用内存模式"
echo ""
read -p "是否继续配置日志限制?(y/N): " confirm
if [[ $confirm != [yY] ]]; then
echo "已取消操作"
exit 0
fi
# 备份原配置文件
echo "备份原配置文件..."
cp /etc/systemd/journald.conf /etc/systemd/journald.conf.backup
# 创建新的配置
echo "配置日志限制..."
cat > /etc/systemd/journald.conf << 'EOF'
[Journal]
# 限制总日志大小为100M
SystemMaxUse=100M
# 限制单个日志文件大小为10M
SystemMaxFileSize=10M
# 保留时间7天
MaxRetentionSec=7d
# 启用压缩
Compress=yes
# 限制运行时日志大小为50M
RuntimeMaxUse=50M
# 日志存储到磁盘
Storage=persistent
# 转发到syslog
ForwardToSyslog=no
EOF
# 重启journald服务
echo "重启systemd-journald服务..."
systemctl restart systemd-journald
# 清理现有超大日志
echo "清理现有超大日志..."
journalctl --vacuum-size=100M
journalctl --vacuum-time=7d
echo ""
echo "配置完成!"
# 显示配置后状态
echo "配置后日志占用:"
journalctl --disk-usage
echo ""
echo "配置详情:"
echo "- 总日志大小限制: 100M"
echo "- 单文件大小限制: 10M"
echo "- 保留时间: 7天"
echo "- 压缩: 启用"
echo "- 运行时日志: 50M"
echo ""
echo "如需恢复原配置,运行:"
echo "cp /etc/systemd/journald.conf.backup /etc/systemd/journald.conf"
echo "systemctl restart systemd-journald"
其他限制系统日志的方法:
方法一:停止并禁用 rsyslog 服务
这个方法包含两个步骤的命令:一个是立即停止当前正在运行的服务,另一个是禁止它开机自启。推荐将它们一起执行。
命令 (建议完整复制并执行):
sudo systemctl stop rsyslog && sudo systemctl disable rsyslog
sudo systemctl stop rsyslog: 这个命令会立即停止rsyslog服务。sudo systemctl disable rsyslog: 这个命令会阻止rsyslog服务在系统下次启动时自动运行。&&: 这是一个逻辑操作符,表示只有当第一个命令(stop)成功执行后,才会执行第二个命令(disable)。
方法二:配置 journald 不存储日志
这个方法也包含两个步骤:修改配置文件,然后重启服务使新配置生效。
第一步:修改配置文件
您可以使用 sed 命令来自动修改配置文件。这个命令会找到 #Storage=auto 这一行(#号代表该行为注释),去掉注释符#并将其值修改为 none。
命令:
sudo sed -i 's/#*Storage=auto/Storage=none/' /etc/systemd/journald.conf
注意:这里我使用了 #* 来匹配 Storage=auto 前面可能有或没有 # 号的情况,这样即使您之前修改过,命令也能正常工作。
第二步:重启 journald 服务
修改配置后,需要重启 systemd-journald 服务来应用新的设置。
命令:
sudo systemctl restart systemd-journald
方法三(谨慎):将 /var/log 权限设置为 400
作用:Linux权限 400 意味着只有文件的所有者(通常是 root 用户)拥有读取权限,没有任何人(包括所有者)有写入或执行的权限。
- 将
/var/log目录的权限设为400,意味着系统中的任何进程(即便是以root身份运行的进程)都无法再向这个目录中写入任何新文件或向现有文件追加内容。
对VPS的影响:
- 优点:效果立竿见影,能强制性地阻止几乎所有日志写入该目录,从而控制硬盘空间占用。
- 缺点/风险:
- 过于粗暴:这种方法非常“暴力”。它不仅阻止了日志写入,还可能导致依赖于在
/var/log子目录中创建或写入文件的应用程序或服务失败。某些程序在无法写入其预期的日志文件时可能会崩溃或无法启动。 - 可能引发其他错误:系统或应用程序在尝试写入日志失败时,可能会不断地尝试重试,这本身也可能消耗一定的CPU资源。错误信息可能会被输出到其他地方,或者干脆丢失。
- ac01 的含义未知:您提到的 “ac01” 并不是一个标准的Linux权限或属性设置。这可能是您特定环境下的一个别名或是一个误写。标准的权限设置是使用数字(如
400)或符号(如r-- --- ---)表示的。如果它是一个特定的ACL(访问控制列表)或chattr属性,需要具体分析其作用。但仅从权限400来看,风险已经很大。
- 过于粗暴:这种方法非常“暴力”。它不仅阻止了日志写入,还可能导致依赖于在
0