複数のNodeプロセスが同じコードを実行するNode.jsアプリケーションを実行したいと思います。私はそれを使用しています走るNode プロセスをそのまま起動して管理します。良いシェフのサポート。設定を説明するために2つのrunitサービスディレクトリを実行しているとします。
/etc/sv/test-1/run
#!/bin/sh
echo running test 1
sleep 9999
/etc/sv/test-2/run
#!/bin/sh
echo running test 2
sleep 9999
(実際のNodeアプリケーションを実行するためのテストプレースホルダーはWです。echo
)sleep
これはうまくいきます...基本的に、runit
プログラムがsvlogd
各サービスのログを別々のディレクトリに保存しようとしていることを除いて。問題は、複数の場所でアプリケーションのすべてのログエントリを表示したくないことです。
svlogd
同じログファイルに書き込もうとした最初の試みは次のとおりです。
/etc/sv/test-1/log/run
#!/bin/sh
exec svlogd -tt /var/log/test
/etc/sv/test-2/log/run
#!/bin/sh
exec svlogd -tt /var/log/test
これではありません。どのログサービスを最初に起動しても正常に実行されます。 2 番目に開始されたロギングサービスは、他のロギングサービスによってロックされているため実行されません。表示するには:
$ sudo /etc/service/test-2/log/run
svlogd: warning: unable to lock directory: /var/log/test: temporary failure
svlogd: fatal: no functional log directories.
これを設定するより良い方法はありますか?runit
同じコードを実行する複数のサービスのすべてのログエントリを1か所でどのように表示できますか?
答え1
私が知っている限り、svlogd
ログを単一のファイルにマージすることはサポートされていません。ただし、ソケットのロギングはサポートしています。私の回避策は、svlogd
ログエントリをUDPを介して実行されているコンピュータに転送するように指示することでした。システムログはい。
/etc/sv/test-1/log/run
#!/bin/sh
exec svlogd -tt /var/log/test/1
/var/log/test/1/config
ptest-1:
U127.0.0.1
/etc/sv/test-2/log/run
#!/bin/sh
exec svlogd -tt /var/log/test/2
/var/log/test/2/config
ptest-2:
U127.0.0.1
ここでは、必要なタスクを実行するようにrsyslogを設定するだけです。
答え2
「ロガー」を使用したシステムログの記録
syslogに満足している場合は、logger
代わりにsyslogを使用してくださいsvlogd
。ロガーに実行スクリプトを提供することの重要な点は、ロギングに必要なすべてのプログラムを実行できることです。
/etc/sv/test-1/log/run
#!/bin/sh
exec logger -i -p daemon.notice -t my_service
。
ビューにマージ
別の良いアイデアは、ログを別の場所に置き、ファイルを表示するときにスクリプトを使用してログをマージすることです。たとえば、タイムスタンプを使用すると、svlogd
次のことができます。
cat /var/log/test/*/current | sort | less
複数のログファイルを同時に表示できる他の強力なツールがあります。マルチテール