V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
284716337
V2EX  ›  Linux

正在运行的应用,使用 cat /dev/null > logfile 后文件空间不释放

  •  
  •   284716337 · 41 天前 · 851 次点击
    这是一个创建于 41 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教各位大佬,我有个 java 的应用,用的是nohup java -jar > logfile.log & 这样启动的,有时候日志文件比较大我想清理下,但是又不想停止应用,使用以下的几个方法

    方法 1
    cat /dev/null > logfile
    方法 2
    : > logfile
    方法 3
    cat "" > logfile
    
    

    执行后发现日志文件里面的内容为空了,但是日志文件的大小没有任何变化。

    大佬能告诉我是哪里出问题了么?有啥解决办法呢? 谢谢各位大佬!

    第 1 条附言  ·  40 天前

    暂时发现一个解决办法 修改启动命令为:nohup java -jar > logfile.log 2>&1 & 后就可以用那几种方式清空日志了

    11 条回复
    guyeu
        1
    guyeu  
       41 天前
    ```shell
    truncate -s 0 /path/to/logfile
    ```

    :(
    依然搞不明白 V2 评论区咋发源码。
    284716337
        2
    284716337  
    OP
       41 天前
    @guyeu 不行,试过了,
    guyeu
        3
    guyeu  
       41 天前
    @284716337 操作系统,文件系统是什么?
    284716337
        4
    284716337  
    OP
       41 天前
    @guyeu centos 7.6 ext4 的磁盘格式
    yanqiyu
        5
    yanqiyu  
       41 天前
    是不是程序已经释放+重新打开了,要不去对应的 /proc/pid/fd/N 来 truncate 以下
    chingyat
        6
    chingyat  
       41 天前
    truncate 应该是有效的,这不过程序已经打开的文件描述符不会自动 seek 到文件开头,当程序再次输出的时候,文件的大小还是会增加。这时候文件前面的部分应该是空洞。可以通过 ls -lsh logfile 比较。
    tomychen
        7
    tomychen  
       39 天前
    touch newfile ;cp newfile /path/to/logfile
    cnleon
        8
    cnleon  
       39 天前
    你是怎么确认文件大小没有变化的? ls ? du ?
    284716337
        9
    284716337  
    OP
       38 天前 via Android
    @cnleon ls -lh 和 du 看大小没有变,还有 df -h 看磁盘释放没有
    cnleon
        10
    cnleon  
       38 天前
    @284716337 你 lsof 看看吧
    keay250
        11
    keay250  
       32 天前
    我一般是这么清空日志文件的
    `echo > logfile`
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   953 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:09 · PVG 03:09 · LAX 12:09 · JFK 15:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.