/ 分享 / 165 浏览

如何限制liunx服务器systemd日志大小到100M

执行下面的命令一次设置好(中途需要输入 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 来看,风险已经很大。
Linux服务器自动备份到 Cloudflare R2详细教程
Linux服务器自动备份到 Cloudflare R2详细教程
解决独角数卡在纯IPv6环境下 Gmail SMTP 无法发送邮件的问题(WARP出口方案)
解决独角数卡在纯IPv6环境下 Gmail SMTP 无法发送邮件的问题(WARP出口方案)
新到手的vps必须设置的几个重要设置
新到手的vps必须设置的几个重要设置
摩尔多瓦Moldtelecom Prepaid eSIM 一年保号仅需0.8RMB
摩尔多瓦Moldtelecom Prepaid eSIM 一年保号仅需0.8RMB
Typecho默认的文章地址带有index.php,怎么去掉
Typecho默认的文章地址带有index.php,怎么去掉
购买VPS后必须要做的4件事情,很重要!
购买VPS后必须要做的4件事情,很重要!

0

  1. 此文章暂无评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注