在后台运行管道 bash 脚本

And*_*nro 6 bash pipe background-process daemon

我正在尝试构建一个监视脚本来使用 netcat 监视本地主机通信。我已经构建了两个脚本,一个用于启动监控循环,另一个用于循环本身。它们如下:

启动文件

#!/bin/bash
netcat localhost 1099  | bash loop.sh &
Run Code Online (Sandbox Code Playgroud)

循环文件

#!/bin/bash
while read sInput; do
     ...do something with $sInput
done
Run Code Online (Sandbox Code Playgroud)

只需在没有前台的情况下运行此应用程序就可以正常工作,但是一旦我尝试在后台运行此脚本,它就会立即从运行变为停止。有人可以告诉我为什么会发生这种情况以及如何缓解问题。

我的最终目标是拥有一个 bash 脚本,我可以用它创建一个 arch linux 守护进程脚本,并使一切正常运行。感谢您的帮助。

Arc*_*ege 6

听起来像是从标准输入(stdin)读取。尝试将-d(不要尝试从标准输入读取)选项添加到netcat. 或者在命令行上重定向:

netcat localhost 1099 <&- | bash loop.sh &
Run Code Online (Sandbox Code Playgroud)

您可能还想使用它nohup来确保当/如果您在该 shell 停止之前退出该 shell 时它不会受到不利影响。