我正在尝试监视正在将输出写入文件的远程嵌入式主机:/var/log/myapp.log
该主机可能会断电数小时。该应用程序可能会被终止并重新启动。
在我的本地计算机上,我想在更新时实时捕获 myapp.log 内容。
我的基本脚本是这样做的:
ssh user@remote_host_ip 'tail -f /var/log/myapp.log' | tee -a ~/logs/myapp.log
这适用于远程主机已经启动并且可以通过 SSH 连接的简单情况。我想要一个能够不断尝试通过 SSH 一遍又一遍地连接到远程主机,直到成功,然后运行命令tail -f ...
并在本地捕获输出的东西。我想避免在远程主机断电时重新运行该程序。
从我到目前为止的搜索来看,听起来我可能想使用autossh
和 的某种组合screen
。
我尝试使用rscreen
autossh 附带的脚本,但运气不佳。下面是修改后的脚本,它使用另一个参数来让命令在远程主机上运行。我调用修改后的脚本rscreen_myapp
:
#!/bin/sh
#
# MODIFIED (not working) sample script to use autossh to open up a remote screen
# session, or reconnect to an existing one.
#
# $Id: rscreen,v 1.4 2002/05/07 17:54:13 harding Exp $
autossh -M 20004 -t $1 "screen -e^Zz -D -R -X $2"
但是当我运行: 时./rscreen_myapp remoteuser@remotehost "tail -f /var/log/myapp.log"
,我得到:
Agent pid 28990
Identity added: /home/localuser/.ssh/id_rsa (/home/localuser/.ssh/id_rsa)
No screen session found.
Connection to 10.10.3.9 closed.
我正在与屏幕作斗争,并且确实对它感到困惑......我做错了什么?我没有-X
正确使用论证吗?或者我需要做其他事情吗?我需要以某种方式利用这些screenlog.n
文件吗? (我宁愿避免使用 .n 唯一标识符,而更喜欢只在本地计算机上使用 myapp.log。)
最终,这个脚本/程序将在我的后台自动运行当地的机器。因此,只要本地计算机处于打开状态,它就会尽可能地无限期地尝试从远程计算机捕获/镜像日志。