Ubuntu 12.04 服务器 x64,清漆 3.0.2
我正在尝试通过 Apache 的 rotatelogs 传输 varnishncsa 的日志,并从 shell 运行,一切正常:
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:
发生这种情况:start-stop-daemon 产生一个 bash,它执行 varnishlog 并记录到 stdout 并通过 rotatelogs 管道输出。该
-b
参数让 start-stop-daemon 将启动的进程分离到后台。缺点是,如果命令成功执行,start-stop-daemon 将无法再检测到。