systemd를 사용하여 프로그래밍할 파이프 출력

systemd를 사용하여 프로그래밍할 파이프 출력

이것은 간단해야 할 것 같지만 작동시키려고 애쓰고 있습니다. 메모리에서 로그 항목을 출력하는 로깅 프로그램(varnishncsa)의 출력을 cronolog로 파이프할 수 있도록 systemd 서비스를 설정하려고 합니다. 내가 그것을 작동시킬 수 있었던 유일한 방법은 전경에 있는 것입니다. 나는 그것을 시스템 서비스로 작동시키려고 노력하고 있습니다. 전경을 차지하는 스크립트는 다음과 같습니다.

#!/bin/bash
/usr/bin/varnishncsa -F '%{X-Real-IP}i %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i"' -q "ReqHeader:Host ~ '(^|\.)example\.com$'" -C |/usr/sbin/cronolog "/example/varnish_access_log.%Y-%m-%d"

내가 시도하는 시스템 서비스 설정은 다음과 같습니다.

[Unit]
Description=Example website Varnish Cache HTTP accelerator NCSA logging daemon
After=varnish.service

[Service]
RuntimeDirectory=varnishncsa
Type=forking
PIDFile=/run/varnishncsa/varnishncsa-example.pid
User=varnish
Group=varnish
ExecStart=/usr/local/bin/varnishncsa-example.sh
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

이는 데몬으로 실행하고 파일에 쓰기 위해 제공된 systemd 서비스를 기반으로 합니다(-D 및 -P를 사용하여 데몬으로 직접 실행하고 출력을 파이프할 수는 없습니다).

[Unit]
Description=Varnish Cache HTTP accelerator NCSA logging daemon
After=varnish.service

[Service]
RuntimeDirectory=varnishncsa
Type=forking
PIDFile=/run/varnishncsa/varnishncsa.pid
User=varnish
Group=varnish
ExecStart=/usr/bin/varnishncsa -a -w /var/log/varnish/varnishncsa.log -D -P /run/varnishncsa/varnishncsa.pid
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

백그라운드에서 실행되도록 많은 옵션을 시도했지만 아무것도 작동하지 않으며 온라인에서 이 상황을 구체적으로 다루는 항목을 찾을 수 없습니다. 아마도 systemd가 아직 새롭거나 이 작업을 수행하는 다른 사람들이 자신이 무엇을 하고 있는지 더 잘 알고 있기 때문일 것입니다!

어떤 도움이라도 대단히 감사하겠습니다.

답변1

-D프로그램이 더 이상 자체적으로 데몬화되지 않도록 옵션 을 제거했습니다 . 또한 -P프로세스 ID를 파일에 저장하는 옵션 도 제거했습니다 . 따라서 귀하의 유닛은 포크 유형이라고 계속해서 말해서는 안 되며, 채우지 않은 가짜 pid 파일을 제공해서는 안 됩니다. Type=simple대신 시도하고 PIDFile=...ExecReload=...스크립트가 로그 파일 회전을 처리하지 않으므로 제거하십시오.

관련 정보