【问题标题】:Start a command, count lines of output after 10 seconds, then either restart it or let it run启动一个命令,在 10 秒后计算输出行数,然后重新启动它或让它运行
【发布时间】:2012-08-14 13:31:02
【问题描述】:

我正在尝试编写一个有趣的情况。我有一个程序在成功启动 10 秒后输出 26,000 行。否则我必须杀死它并重新启动它。我试着做这样的事情:

test $(./long_program | wc -l) -eq 26000 && echo "Started successfully"

但这只有在程序完成运行时才有效。有没有一种聪明的方法来观察命令的输出流并做出相应的决定?我很茫然,甚至不确定如何开始搜索这个。谢谢!

【问题讨论】:

    标签: linux bash


    【解决方案1】:
    count=0
    until [ $count -eq 26000 ]; do
        killall ./longrun
        #start in background
        ./longrun >output.$$ &
        sleep 10
        count=$(wc -l output.$$ |awk '{print $1}')   
    done
    echo "done"
    #disown so it continues after current login quits
    disown -h
    

    【讨论】:

    • 哇从来不知道否认。我肯定会使用它。
    • Don't use kill -9,同样 kill 不读取标准输入,所以 pipline 不起作用。见mywiki.wooledge.org/ProcessManagement
    • 我用 killall 代替它以保持简单
    • 如果你想运行多个实例,最好还是用 pid 杀死。
    【解决方案2】:

    怎么样

    ./long_program > mylogfile &
    pid=$!
    sleep 10
    
    # then test on mylogfile length and kill $pid if needed
    

    【讨论】:

    • 这实际上非常简单直接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2018-05-01
    • 2021-01-13
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多