解锁被另一个进程锁定的日志文件 linux

解锁被另一个进程锁定的日志文件 linux

我已经编写了一个脚本,用于每天在我的 ubuntu 服务器上清空/取消一次日志文件。

日志文件路径:/var/log/turn.log

为此,我尝试了以下命令:

命令: sudo cp /dev/null /var/log/turn.log sudo truncate -s 0 /var/log/turn.log

使用任何命令都不会减少文件的大小。我怀疑该文件被当前正在向其中写入日志的进程锁定了。

$ sudo fuser /var/log/turn.log
/var/log/turn.log :    964 
$ ps 964
PID    TTY    STAT    TIME    COMMAND

964    ?      Ssl    0:54     /usr/bin/turnserver -c  /etc/turnserver.conf -o -v
$

我如何解锁此文件以便我的脚本可以在每天的特定时间使日志文件无效。

答案1

我如何解锁此文件以便我的脚本可以在每天的特定时间使日志文件无效。

在执行操作之前先停止 turnserver

sudo cp /dev/null /var/log/turn.log 
sudo truncate -s 0 /var/log

并在完成后启动它。如果仅支持,也可以在清空文件后重新启动。我会> /var/log/turn.log以 root 身份使用或以 root 身份从 crontab 使用;但这也会保持文件原样,直到发布。不需要截断。

除了修改turnsever使其不一直锁定文件(使用服务我会在需要时锁定文件并在循环中的某个地方关闭/重新打开日志)之外,更通用的方法是将日志添加到logrotate并让logrotate处理此问题:压缩文件并删除超过x天的压缩文件。turnserver永远不会触及那些较旧的日志。

答案2

尝试此命令行,它应该用新的空日志文件替换旧日志文件。旧日志文件将具有*.old文件扩展名。

sudo cp -a --attributes-only /var/log/turn.log /var/log/turn.log.new &&\
sudo ln -f /var/log/turn.log /var/log/turn.log.old &&\
sudo ln -f /var/log/turn.log.new /var/log/turn.log &&\
sudo unlink /var/log/turn.log.new && sync ||\
echo "Error: Something went wrong."

相关内容