linux - 通过带有 gzip 命令的 shell 脚本在 tomcat 服务器中备份日志文件

标签 linux shell tomcat

我有一些在 tomcat 应用程序中创建的日志文件,我通过 gzip 命令执行收缩的 shell 脚本备份文件,收缩后,虽然旧的日志文件已经不存在,但它们仍然占用内存和磁盘空间, 这会耗尽光盘的资源!

这是shell脚本的代码:

mkdir /tmp/backUp
mv `find $TOMCATDIR/logs/*.log -mtime +3`  /tmp/backUp
cd  /tmp/backUp
gzip *

脚本运行后,文件仍然存在于磁盘中(虽然没有打开)

lsof |grep "已删除"

java       584       cg   9w     REG             253,7     2253  18317840 /app/jakarta/apache-tomcat-8.0.9_xxx/logs/back06.07/catalina.06-02.log (deleted)
java       584       cg  10w     REG             253, 7      881   18317446 /app/jakartaapache-tomcat-8.0.9_xxx/logs/back06.07/localhost.06-02.log (deleted)
.......
....
...

最佳答案

文件从文件系统中删除,其中删除了对该 inode 的任何引用。引用可以在磁盘上(任何目录中的链接),并且..来自打开的应用程序。如果您删除文件 - 您只从磁盘中删除引用,但是 - 仍然有来自应用程序的引用。

您可以通过两种方式“释放”空间:

  1. 您可以终止打开文件的应用程序。
  2. 您可以截断文件。

如果您知道 pid - 查看此 pid 打开了哪些文件:ls -l/proc/PID/fd 您会在此处看到如下链接:

undefine@uml:~$ ls -l /proc/18596/fd
razem 0
lrwx------ 1 undefine undefine 64 lut  1 00:06 0 -> /dev/pts/30
lrwx------ 1 undefine undefine 64 lut  1 00:06 1 -> /dev/pts/30
lrwx------ 1 undefine undefine 64 lut  1 00:05 2 -> /dev/pts/30
lr-x------ 1 undefine undefine 64 lut  1 00:06 3 -> /home/undefine/x (deleted)
lr-x------ 1 undefine undefine 64 lut  1 00:06 4 -> anon_inode:inotify

如您所见 - 3 fd 已删除。你可以通过命令截断它(例如):

undefine@uml:~$ :>/proc/18596/fd/3
undefine@uml:~$ 

请记住,如果应用程序读取此文件 - 这对他们来说可能是危险的。但是 - 如果它只是一个日志文件 - 您可以安全地截断它。

关于linux - 通过带有 gzip 命令的 shell 脚本在 tomcat 服务器中备份日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38099223/

相关文章:

linux - Kubernetes 用户界面 : error in kubectl proxy

linux - bash:检查文件是否可读时需要条件二元运算符?

mysql - 如何在 Fedora 11 中安装 mysql Workbench

java - 取消部署我的应用程序时,Tomcat 抛出 java.lang.UnsupportedOperationException

xml - 为什么在使用 "ant"命令 build.xml 时出现导入错误?

Tomcat:没有 Catalina 记录服务器错误

c - 为什么在执行不带 "%"的 printf 后打印字符 "\n"?

linux - 在命令行linux上执行多个命令

用于更新 postgres 数据库的 bash 脚本

bash - xargs 和 kill 不能协同工作以终止特定进程