파이프에서 읽고 파일에 쓰기
데몬이 임의의 프로세스에서 생성 된 입력을 읽으려면 해당 프로세스를 파이프에 연결해야합니다. 여기서 임의의 프로세스는 명령을 에코하는 것이며 다른 컨텍스트에서 실행됩니다. 따라서 명명 된 파이프를 작성하십시오 (종종 유닉스 컨텍스트에서 fifo라고 함).
mkfifo /var/run/daemon.fifo
</var/run/daemon.fifo /path/to/daemond --option >daemon.log
파이프에 명령을 작성하십시오.
echo 'FORWARD 10' >/var/run/daemon.fifo
echo 'LEFT 72' >/var/run/daemon.fifo
그러나 이것은 표준 입력에서 파일 끝을 볼 때 데몬이 종료 될 가능성이 높으며, 이는 파이프에 쓰는 첫 번째 프로세스가 종료되는 즉시 발생합니다. tail -f그 문제를 피하기 위해 사용할 수 있습니다 .
</var/run/daemon.fifo tail -c +1 -f | {
echo $$ >/var/run/daemon.pid
exec /path/to/daemond --option >daemon.log
}
일부 tail구현에서는 버퍼링으로 물릴 수 있습니다. tail프로세스는 출력을 생성하기에 충분한 바이트를 축적 할 때까지 기다립니다. POSIX 도구 상자에서이 문제를 해결할 수 있다고 생각하지 않습니다. 그것이 문제라면 사소한 C 또는 Perl 또는 Python 프로그램을 사용하십시오. 내가 말할 수있는 tail한 GNU coreutils (Linux 및 다른 곳에서 찾을 수 있음)는이 점에서 안전합니다.
데몬을 중지 echo >/var/run/daemon.fifo하면 tail프로세스가 종료됩니다.
화면 내에서 프로그램 시작
서비스 관리자에서 데몬을 직접 호출하는 대신 실제로 SysV init 또는 래퍼 스크립트 또는 Upstart와 같은 추가 기능을 사용하고 있습니까?
screen -c daemon.screenrc -L -d -m -S daemon_name /path/to/daemond --option
데몬은 서비스 관리자의 하위 프로세스가 아니므로 올바른 프로세스에 신호를 보내야합니다. 이를 수행하는 방법은 데몬이 시작되는 방식과 방법에 따라 다릅니다.
그건 기술적으로 가능 터미널로 실행중인 프로세스를 연결하지만,이 프로덕션 시스템에서 확실히 있도록 프로그램을 충돌거야 위험이있다.
이 -L옵션은 화면에 창에 나타나는 모든 것을 파일로 작성합니다. 파일 이름은 지시문 daemon.screenrc과 함께 제공됩니다 logfile.