我没有太多运气找到问题的答案,但也许我没有正确地要求它。
我有一个启动流程,如下所示:
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 操作,则说明您的脚本工作正常。