我正在尝试使用使用 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'
然而你真正想要的是screen
或tmux
。这些程序将允许您运行命令,注销并在登录后连接到旧的“已关闭”终端。
您的示例中非常基本的屏幕会话将如下所示:
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
。