#!/bin/bash
python /home/sites/myapp/Main.py &> /home/sites/myapp/logs/init.log &
该脚本每周生成大约 1G 的日志。
当我在运行时手动删除 init.log 并且未重新启动脚本时,它仍将数据保存在丢失的 init.log 中。当脚本重新启动时,init.log 将再次可见。
重新启动脚本是查看日志的唯一方法吗?
在 unix 系统上,创建时init.log
会创建一个inode。每个inode
s 中都有一个计数器,用于计算对该文件的所有引用。引用意味着硬链接或打开文件时。仅当此计数器归零时才删除文件。
因此,当 stdout 被重定向到init.log
它的计数器值为 2 时(由目录inode
条目引用,并因open
.仍然存在。脚本完成后,计数器变为 0 并被删除。rm
unlink
inode
inode
没有简单的方法来读取任何目录条目都没有引用的 inode。
在没有任何引用文件之前,不会真正删除文件。在这种情况下,您已经删除了所有目录条目,但您的程序仍然有一个打开的文件描述符,因此在程序退出之前不会完全删除数据。请注意,它还会继续占用磁盘空间。
在Linux中,您仍然可以查看文件的内容,/proc/PID/fd/FD
其中PID是进程的ID,FD是您感兴趣的文件描述符。一旦程序退出,数据就是toast并且可以回收磁盘空间......所以得到你的数据,你可以;)
如果您知道程序上仍有打开的文件描述符,则不应删除日志文件。相反,cat /dev/null > log.file
使用 bash 或在 bash 中截断文件,只需使用> log.file
.