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 больше не может обнаружить, если команда выполняется успешно.