Назад | Перейти на главную страницу

Синтаксис для передачи журналов лака на ротацию журналов

Ubuntu 12.04 Сервер x64, Varnish 3.0.2

Я пытаюсь передать журналы varnishncsa через rotatelogs Apache, и при запуске из оболочки все работает нормально:

sudo varnishncsa -a -P /var/run/varnishncsa/varnishncsa.pid |/usr/sbin/rotatelogs /var/log/varnish/varnish.log.%Y%m%d%H 3600

создает новый файл журнала в / var / log / varnish с ротацией каждый час (3600 секунд). Однако я изо всех сил пытаюсь заставить все работать так же внутри /etc/init.d/varnishncsa:

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/$NAME
PIDFILE=/var/run/$NAME/$NAME.pid
LOGFILE=/var/log/varnish/varnishncsa.log
USER=varnishlog

DAEMON_OPTS="-a -P ${PIDFILE}"
DAEMON_PIPE="|/usr/sbin/rotatelogs /var/log/varnish/varnish.log.%Y%m%d%H 3600"

...

start_varnishncsa() {
    output=$(/bin/tempfile -s.varnish)
    log_daemon_msg "Starting $DESC" "$NAME"
    create_pid_directory
    if start-stop-daemon --start --verbose --pidfile ${PIDFILE} \
        --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} \
        > ${output} 2>&1; then
        log_end_msg 0
    else
        log_end_msg 1
        cat $output
        exit 1
    fi
    rm $output
}

Куда мне поместить DAEMON_PIPE в приведенный выше код? Я пробовал в конце:

if start-stop-daemon --start --verbose --pidfile ${PIDFILE}

это то место, куда обычно идут дополнительные параметры командной строки, но при этом не создается файл журнала.

Вы можете изменить /etc/init.d/varnishncsa следующим образом:

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/$NAME
PIDFILE=/var/run/$NAME/$NAME.pid
LOGFILE=/var/log/varnish/varnishncsa.log
USER=varnishlog
DAEMON_OPTS="-a -P $PIDFILE"

...

start_varnishncsa() {
    output=$(/bin/tempfile -s.varnish)
    log_daemon_msg "Starting $DESC" "$NAME"
    create_pid_directory
    if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
        --chuid $USER -b --exec /bin/bash \
        -- -c "${DAEMON} ${DAEMON_OPTS} \
               | /usr/sbin/rotatelogs /var/log/varnish/varnish.log.%Y%m%d%H 3600" \
        > ${output} 2>&1; then
    log_end_msg 0
    else
    log_end_msg 1
    cat $output
    exit 1
    fi
    rm $output
}

Это происходит: start-stop-daemon порождает bash, который выполняет varnishlog с записью в stdout и направляет вывод через rotatelogs. В -b Параметр позволяет start-stop-daemon отсоединить запущенный процесс от фона. Обратной стороной является то, что демон start-stop-daemon больше не может обнаружить, если команда выполняется успешно.