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=...

関連情報