我正在编写shell脚本以在Linux上启动服务。
我想启动一个程序,并将其pid保存到pid文件中(因此服务可以再次停止它)。
我还想将其标准输出的前几行(100,说)行捕获到一个文件中,并丢弃其余的(因为有很多输出,所以如果我保存它,文件可能会变得太大全部)。
我尝试过以下代码:
exec 3< <(program 2>&1 &
echo $! >flags/program.pid )
(head -n 100 <&3 >program.log
cat <&3 >/dev/null)&
但是,运行此命令后,日志文件为空。
这可能是因为还没有100行吗?
**重要**我不想捕获整个过程的输出 - 我想丢弃除前100行之外的所有行,否则磁盘将迅速填满。
我已在Bash: Capture output of command run in background阅读了所谓的重复内容,并提出了以下建议代码:
{{1}}
但是,我不了解这里的潜在机制,并且希望得到保证,这不会吞噬资源(它可能一次运行多年,因为它是一项服务,并且程序输出大量数据)。
另外,显然,欢迎提出改进建议。