/var/log/account/pacct 太大了,ckpacct 在哪里(用 cicle/gzip 压缩它)?

/var/log/account/pacct 太大了,ckpacct 在哪里(用 cicle/gzip 压缩它)?

我有 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 所做的操作 - 不是吗?

相关内容