运行命令,该命令不会在关闭终端时终止

运行命令,该命令不会在关闭终端时终止

我正在尝试使用使用 SSH 登录的远程设备,该设备使用 MQTT 进行通信,并且我希望能够远程记录该设备,而无需在运行命令时保持终端打开。目前我运行的命令如下所示,但如果不保持笔记本电脑与终端运行连接,则无法运行该命令。

我已经阅读过有关使用 (nohup "command" &) 等解决方案的信息,但我无法将其纳入下面的代码中。

mosquitto_sub -v -u Test -P Test123 -t '#' | while read -r line ; do
        echo -e "$(date "+%Y-%m-%d %H:%M:%S") $line"
done | tee -a MQTT.txt

总结一下,我希望能够运行上面的代码,并将进程与终端分离,以便它在没有连接终端的情况下继续运行,我相信使用 nohup 是可以实现的,但我仍然需要记录消息保存到本地文件,以便稍后查看。我如何更改上面的代码才能做到这一点?

答案1

你可以写

nohup bash -c 'mosquitto_sub -v -u Test -P Test123 -t "#" | while read -r line ; do
        echo -e "$(date "+%Y-%m-%d %H:%M:%S") $line"
done | tee -a MQTT.txt'

然而你真正想要的是screentmux。这些程序将允许您运行命令,注销并在登录后连接到旧的“已关闭”终端。


您的示例中非常基​​本的屏幕会话将如下所示:

screen

mosquitto_sub -v -u Test -P Test123 -t '#' | while read -r line ; do
    echo -e "$(date "+%Y-%m-%d %H:%M:%S") $line"
done | tee -a MQTT.txt

# Hit "Ctrl-a d", it will detach the screen

现在您可以关闭终端并注销,登录后再次运行screen -R

相关内容