Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在运行时手动删除日志文件时,bash脚本将stdout和stderr保存在何处?_Bash_Stdout_Stderr_Inode - Fatal编程技术网

在运行时手动删除日志文件时,bash脚本将stdout和stderr保存在何处?

在运行时手动删除日志文件时,bash脚本将stdout和stderr保存在何处?,bash,stdout,stderr,inode,Bash,Stdout,Stderr,Inode,此脚本生成的日志大约为1G/周。 当我在运行时手动删除init.log并且没有重新启动脚本时,它仍然将数据保存在丢失的init.log中。重新启动脚本时,init.log将再次可见 重新启动脚本是否是查看日志的唯一方法?在unix系统上,创建init.log后,将创建一个。每个inodes中都有一个计数器,用于统计对该文件的所有引用。引用是指硬链接或打开文件时的引用。只有当此计数器返回到零时,文件才会被删除 因此,当stdout被重定向到init.log时,其inode的计数器值为2(由目录项引

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


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

在unix系统上,创建
init.log
后,将创建一个。每个
inode
s中都有一个计数器,用于统计对该文件的所有引用。引用是指硬链接或打开文件时的引用。只有当此计数器返回到零时,文件才会被删除

因此,当stdout被重定向到
init.log
时,其
inode
的计数器值为2(由目录项引用,并因
open
而计数)。当
rm
时(使用
unlink
函数)删除文件时,此计数器变为1,因此文件未被任何目录项引用,但
inode
仍然存在。脚本完成后,计数器变为0,并且
inode
被删除


没有简单的方法可以读取未被任何目录项引用的索引节点。

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

在Linux中,您仍然可以在
/proc/PID/fd/fd
中查看文件的内容,其中PID是进程的id,fd是您感兴趣的文件描述符。一旦程序退出,数据就会被删除,磁盘空间也可以被回收……所以请在可以的时候获取数据;)


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

来截断文件,谢谢你。现在这是有意义的。它在
home/
分区中消耗磁盘空间,而不是
/
中可以找到
/proc/PID/fd/fd/
的分区
#!/bin/bash
python /home/sites/myapp/Main.py &> /home/sites/myapp/logs/init.log &