使用nohup启动的进程,会把所有标准输出的打印信息记录到nohup.out文件中。 如果进程长时间不结束,打印信息又多,nohup.out文件就会一直增长,直至磁盘爆满 此时,如果去rm nohup.out文件不会起效,因为进程open了文件,rm后,要进程退出才会close文件,才会真正释放磁盘空间 可以用lsof|grep delete来查询被rm但空间没有释放的文件 因此,要清理nohup.out文件占用的磁盘空间,不应该去rm文件,而应该清空文件内容,即 echo "" > nohup.out 使用nohup ... & 命令启动服务器后,磁盘满了,服务宕了,然后一步一步排查是哪个文件过大,最终定位到是nohup.out文件过大,占了40G, df -lh #磁盘容量命令 du -sh #查看当前文件夹大小 du -sh * #查看当前文件夹下所有文件/文件夹大小,当磁盘满了可以从根目录使用该命令一路排查下去,最终定位到最大的文件 另外来说说nohup的问题,都知道nohup可以后台启动服务并且输出日志,问题是不加控制nohup是无限制的输出日志,硬盘占满是早晚的事,笔者百度了一下可以通过以下方式解决 不生成nohup文件: nohup ./a.sh >/dev/null 2>&1 & 关键在于最后的 >/dev/null 2>&1 部分,/dev/null是一个虚拟的空设备(类似物理中的黑洞),任何输出信息被重定向到该设备后,将会石沉大海 >/dev/null 表示将标准输出信息重定向到"黑洞" 2>&1 表示将标准错误重定向到标准输出(由于标准输出已经定向到“黑洞”了,即:标准输出此时也是"黑洞",再将标准错误输出定向到标准输出,相当于错误输出也被定向至“黑洞”) |
|