我有 2 个大文件,/var/log/account
每个 350MB...,我的根目录只有 10GB...
我读到过可以ckpacct
循环并对其进行 gzip 压缩,但我找不到它,也没有其他命令?
编辑:我发现sudo accton off
禁用日志记录但文件仍然在那里,我想下次启动时它会再次被激活......
他们似乎在骑自行车,但实际上是谁在骑自行车呢?
369114432 May 13 23:23 /var/log/account/pacct
333708160 May 13 12:27 /var/log/account/pacct.0
13681065 May 12 16:21 /var/log/account/pacct.1.gz
3371433 May 11 09:50 /var/log/account/pacct.2.gz
7549333 May 10 07:35 /var/log/account/pacct.3.gz
编辑:我猜测启动脚本会循环执行...无论如何,我创建了这个脚本,但我不知道它可能有什么安全隐患。有什么考虑吗?
cat >ckpacct.sh
#!/bin/bash
if [[ -n "$1" ]]; then
echo "there is no parameters and no --help, read the script and understand what is does, before running it up."
exit 1
fi
if [[ "$USER" != "root" ]]; then
echo "you must be root to run it..."
exit 1
fi
function FUNCerror() {
if(($1!=0));then exit 1; fi
}
cd /var/log/account;FUNCerror $? || exit
# fast ungrab pacct file
accton off;FUNCerror $?
mv -v pacct pacct.0.temp;FUNCerror $?
echo -n |tee pacct;FUNCerror $?
chown -v root:adm pacct;FUNCerror $?
chmod -v o-r pacct;FUNCerror $?
accton on;FUNCerror $?
# compress old 0
gzip -v --best pacct.0;FUNCerror $? #releases also pacct.0 filename
mv -v pacct.0.temp pacct.0;FUNCerror $? #restore new 0 from temp
# change file names upping indexes
#mv -v pacct pacct.0
for((i=4;i>=0;i--));do
mv -v pacct.$i.gz pacct.$((i+1)).gz;FUNCerror $?
done
rm -v pacct.5.gz;FUNCerror $? # remove last in the limit
答案1
循环日志的脚本位于 中/etc/cron.daily/acct
。日志文件的数量由 控制/etc/default/acct
,它还控制是否应在启动时启用进程记帐。
如果您想要完全删除流程核算,sudo apt-get purge acct
也应该这样做。
答案2
将 acct 改为 cron,cron.hourly
而不是 daily。然后,输入以下值/etc/default/acct
:
ACCT_ENABLE="1"
# Amount of days that the logs are kept.
ACCT_LOGGING="2" # you cannot set this less than 2
# if you don't want acct to get an error
答案3
我意识到这是一个老问题,但由于它没有得到解答......
我假设 logrotate 正在执行日志轮换。检查您的 crontab(“crontab -l”),查找标识 conf 文件的 logrotate 任务。查看该 conf 文件以获取与 /var/log/account/pacct 相关的详细信息。
我没有仔细阅读你的脚本,但看起来你重复了 logrotate 所做的操作 - 不是吗?