限制连续运行进程的标准输出

限制连续运行进程的标准输出

我没有太多运气找到问题的答案,但也许我没有正确地要求它。

我有一个启动流程,如下所示:

nohup ping 127.0.0.1 > log.txt >2>&1 &

非常简单的命令,将所有标准输出发送到 log.txt。唯一的问题是我正在运行的命令每隔 n 秒将数据发送到 log.txt。我只想向 log.txt 文件输出一行,而不是附加它并冒着填满驱动器的风险。

有没有办法只将一行输出到 log.txt 并不断被覆盖?

答案1

这是一个快速但肮脏的解决方案,仅保留日志文件中的最后一行输出:

ping localhost | 
  while IFS= read -r line; do 
    printf '%s\n' "$line" > log.txt; 
  done

请注意,在尝试访问文件进行读取时,您现在可能会遇到各种竞争条件。 “锁定”文件以防止相互访问可能会有所帮助。有关在 stackoverflow 上锁定此问题的更多信息可能是一个好的开始:如何从多个脚本同步(锁定/解锁)对 bash 中文件的访问?

答案2

试试这个脚本,它对我有用:

% nohup ping 127.0.0.1 > log.txt >&1&

通过键入以下内容检查进程是否正在运行:

% ps ax | grep ping

如果进程正在运行:

% tail -f log.txt

如果继续执行 ping 操作,则说明您的脚本工作正常。

相关内容