ファイルに出力を書き込むリモート組み込みホストを監視しようとしています。/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を使用することを好みます。)
結局のところ、このスクリプト/プログラムは私のバックグラウンドで自動的に実行されます。地元のマシン。したがって、ローカルシステムが開いている間にリモートシステムのログを無期限にキャプチャ/ミラーリングしようとします。