Ubuntu 12.04 Server x64,Varnish 3.0.2
我试图通过Apache的rotatelogs varnishncsa的日志,并从壳运行,事情工作正常:
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中创build一个新的日志文件,每小时旋转(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}
这是额外的命令行参数通常去的地方,但它不是创build一个日志文件。
您可以通过以下方式修改/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,通过logging到stdout和通过rotatelogs输出pipe道。 -b参数让start-stop-daemon将启动的进程分离到后台。 缺点是,如果该命令成功执行,那么start-stop-daemon无法检测到。