在 CentOS 上做自动清理,通常可以从 系统日志/临时文件/软件包/yum缓存/旧内核 几个方面入手,并用 systemd timer / cron 定时执行。
下面给你一套实用可落地方案。
CentOS 7/8 自带:
systemctl status systemd-tmpfiles-clean
默认每天清理 /tmp、/var/tmp 等。
查看规则:
cat /usr/lib/tmpfiles.d/tmp.conf
如想立即执行:
systemd-tmpfiles --clean
CentOS 7:
yum clean all
CentOS 8 / Stream:
dnf clean all
自动定时(每天):
cat > /etc/cron.daily/clean-yum <<'EOF'
#!/bin/bash
yum clean all >/dev/null 2>&1
EOF
chmod +x /etc/cron.daily/clean-yum
package-cleanup --oldkernels --count=2
定时任务:
cat > /etc/cron.weekly/kernel-clean <<'EOF'
#!/bin/bash
package-cleanup --oldkernels --count=2
EOF
chmod +x /etc/cron.weekly/kernel-clean
dnf remove $(dnf repoquery --installonly --latest-limit=-2 -q)
journalctl --vacuum-size=200M
journalctl --vacuum-time=7d
永久配置:
vi /etc/systemd/journald.conf
SystemMaxUse=200M
MaxRetentionSec=7day
重启:
systemctl restart systemd-journald
/usr/local/bin/centos-cleanup.sh#!/bin/bash
# 清理 yum 缓存
yum clean all
# 清理旧内核
package-cleanup --oldkernels --count=2
# 清理 journal
journalctl --vacuum-time=7d
# 清理 /tmp
find /tmp -type f -mtime +7 -delete
# 清理日志
find /var/log -type f -name "*.log" -mtime +30 -delete
赋予权限:
chmod +x /usr/local/bin/centos-cleanup.sh
每天凌晨 3 点:
crontab -e
0 3 * * * /usr/local/bin/centos-cleanup.sh
示例(简化):
cat > /etc/systemd/system/cleanup.service <<EOF
[Unit]
Description=CentOS Cleanup
[Service]
Type=oneshot
ExecStart=/usr/local/bin/centos-cleanup.sh
EOF
cat > /etc/systemd/system/cleanup.timer <<EOF
[Unit]
Description=Daily Cleanup
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
EOF
systemctl enable --now cleanup.timer
| 项目 | 命令 |
|---|---|
| yum缓存 | yum clean all |
| 旧内核 | package-cleanup |
| journal | journalctl --vacuum |
| /tmp | systemd-tmpfiles |
| 日志 | find /var/log |
如果你愿意,我可以:
你用的是 CentOS 几?服务器还是虚拟机?