여러 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 애플리케이션을 실행하기 위한 테스트 자리 표시자는 와 입니다. 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
이건 아니야. 어떤 로그 서비스를 먼저 시작해도 정상적으로 실행됩니다. 두 번째로 시작된 로깅 서비스는 다른 로깅 서비스에 의해 잠겨 있으므로 실행되지 않습니다. 표시하려면:
$ 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
내가 아는 한, 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
여러 로그 파일을 동시에 볼 수 있는 다른 강력한 도구가 있습니다.다중 꼬리