Saída de tubulação para programa com systemd

0

Isso parece que deve ser simples, mas estou me esforçando para fazê-lo funcionar. Eu estou tentando configurar um serviço systemd para saída de um programa de log (varnishncsa) que gera entradas de log da memória pode ser canalizada para cronolog. A única maneira que consegui fazer funcionar está em primeiro plano. Eu estou tentando fazer isso funcionar como um serviço systemd. O script que assume o primeiro plano é:

#!/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"

A configuração do serviço systemd que estou tentando é:

[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

Que é baseado no serviço systemd fornecido para ser executado como um daemon e gravar em um arquivo (não posso executá-lo diretamente como um daemon, usando -D e -P e canalizar a saída):

[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

Eu tentei muitas opções para executá-lo em segundo plano, mas não consigo fazer nada funcionar, e não consigo encontrar nada on-line que lide com essa situação especificamente. Provavelmente porque o systemd ainda é novo, ou outros fazendo isso têm mais ideia do que estão fazendo!

Qualquer ajuda muito apreciada.

    
por SuperDuperApps 07.04.2017 / 20:27

1 resposta

1

Você removeu a opção -D para que o programa não seja mais desmembrado. Você também removeu a opção -P para salvar o ID do processo em um arquivo. Portanto, sua unidade não deve continuar dizendo que é um tipo de bifurcação, e não deve dar um arquivo pid falso que você não está preenchendo. Experimente Type=simple , e remova PIDFile=... e ExecReload=... , pois o seu script não manipula a rotação do arquivo de log.

    
por 07.04.2017 / 21:12