문서에 따르면 다음과 같은 프로그램을 실행할 수 있습니다.
destination knotifier { program('/path/to/executable'; };
실행 파일의 표준 입력으로 로그를 보냅니다. 하지만 내가 실행 중인 프로그램에서 매개변수를 옵션으로 입력해야 한다면 어떻게 될까요? 이를 수행할 수 있는 방법이 있습니까? 아니면 실행 중인 프로그램에 대한 래퍼를 작성해야 합니까?
답변1
내가 올바르게 이해하고 이것이 Linux에 있다면 다음을 사용해 볼 수 있습니다.
/proc/self/fd/0
논쟁으로. 이는 프로세스의 표준 입력에 대한 심볼릭 링크여야 합니다. 마찬가지로 일부 시스템에서는 다음을 사용할 수 있습니다.
/dev/stdin
이것은 일반적으로 단지 기호 링크입니다 /proc/self/fd/0
. 이것을 테스트할 수 있는 syslog-ng가 있는 시스템은 없지만 다음과 같은 것이 작동할 것이라고 생각합니다.
destination knotifier { program('/path/to/executable -i /proc/self/fd/0'); };
여기서 -i는 실행 파일에 필요한 명령줄 스위치(있는 경우)를 대체합니다. 또한 /dev/fd/0이 사용되는 것을 본 적이 있지만 /proc를 직접 사용하는 경향이 있습니다. 자세한 내용은 을 참조하십시오 man proc
.
답변2
Syslog-ng는 시작 시에만 명령을 실행하므로 대부분의 명령에 대해 래퍼를 작성해야 합니다. 이는 명령 자체가 항상 표준 입력의 입력을 받아들이는 데몬이 되어야 함을 의미합니다.
이건 아주 간단해요...
#!/bin/dash
while read line
do
/execute/my/app $line
done
불행하게도 이 스크립트는 나에게 작동하지 않습니다. 아마도 어떤 모니터를 사용해야 할지 모르기 때문일 것입니다. 그러나 스크립트에 X 서버가 필요하지 않은 경우 이와 같은 간단한 형식이 필요에 적합합니다.
Syslog-ng가 시작 시에만 프로그램을 시작하기 때문에 이것이 도움이 되지는 않지만 xargs
위치 매개변수가 표준 입력에서 생성될 수 있다는 사실이 흥미로웠습니다.
echo 'test' | /usr/bin/xargs -I '{}' /usr/bin/kdialog --passivepopup '{}' 2