1
#!/bin/bash
python /home/sites/myapp/Main.py &> /home/sites/myapp/logs/init.log &

该脚本每周生成大约 1G 的日志。
当我在运行时手动删除 init.log 并且未重新启动脚本时,它仍将数据保存在丢失的 init.log 中。当脚本重新启动时,init.log 将再次可见。

重新启动脚本是查看日志的唯一方法吗?

4

2 回答 2

2

在 unix 系统上,创建时init.log会创建一个。每个inodes 中都有一个计数器,用于计算对该文件的所有引用。引用意味着硬链接或打开文件时。仅当此计数器归零时才删除文件。

因此,当 stdout 被重定向到init.log它的计数器值为 2 时(由目录inode条目引用,并因open.仍然存在。脚本完成后,计数器变为 0 并被删除。rmunlinkinodeinode

没有简单的方法来读取任何目录条目都没有引用的 inode。

于 2013-08-19T08:50:59.620 回答
2

在没有任何引用文件之前,不会真正删除文件。在这种情况下,您已经删除了所有目录条目,但您的程序仍然有一个打开的文件描述符,因此在程序退出之前不会完全删除数据。请注意,它还会继续占用磁盘空间。

在Linux中,您仍然可以查看文件的内容,/proc/PID/fd/FD其中PID是进程的ID,FD是您感兴趣的文件描述符。一旦程序退出,数据就是toast并且可以回收磁盘空间......所以得到你的数据,你可以;)

如果您知道程序上仍有打开的文件描述符,则不应删除日志文件。相反,cat /dev/null > log.file使用 bash 或在 bash 中截断文件,只需使用> log.file.

于 2013-08-19T09:05:11.527 回答