Skip to content

Instantly share code, notes, and snippets.

@garlandkr
Created February 26, 2013 21:46
Show Gist options
  • Save garlandkr/5042529 to your computer and use it in GitHub Desktop.
Save garlandkr/5042529 to your computer and use it in GitHub Desktop.
#!/bin/bash
### BEGIN INIT INFO
# Provides: varnishncsa
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start HTTP accelerator log daemon
# Description: This script provides logging for varnish
### END INIT INFO
# Source function library
. /lib/lsb/init-functions
USER="root"
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
name="varnishncsa"
desc="HTTP accelerator log deamon"
daemon="/usr/bin/$name"
pidfile="/var/run/$name/$name.pid"
<% if @varnish_ncsa_pipe_file -%>
logfile=<%= @varnish_ncsa_pipe_file %>
<% else -%>
logfile="/var/log/varnish/varnishncsa.log"
<% end -%>
daemon_opts=(-a -w "$logfile" -D -F "{ \"remote_addr\": \"%h\",\"remote_user\": \"%u\",\"x_forwarded_for\": \"%{X-Forwarded-For}i\",\"hit_miss\": \"%{Varnish:hitmiss}x\",\"body_bytes_sent\": \"%b\",\"request_time\": \"%{Varnish:time_firstbyte}x\",\"status\": \"%s\",\"request\": \"%r\",\"host\": \"%{host}i\",\"request_method\": \"%m\",\"time_first_byte\": \"%{Varnish:time_firstbyte}x\",\"handling\": \"%{Varnish:handling}x\",\"http_referrer\": \"%{Referrer}i\",\"http_user_agent\": \"%{User-agent}i\"}\"")
logger_name="logger"
logger_pidfile="/var/run/$name/$logger_name.pid"
logger_daemon="/usr/bin/$logger_name"
<% if @varnish_ncsa_syslogtag -%>
logger_daemon_opts="-t <%= @varnish_ncsa_syslogtag %> -f ${logfile}"
<% else -%>
logger_daemon_opts="-t varnishncsa -f ${logfile}"
<% end -%>
# Include defaults if available
varnishncsa_default=`awk -F= '/VARNISHNCSA/{print$2}' /etc/default/varnishncsa`
if [ "$varnishncsa_default" == "0" ] ; then
exit 0;
fi
test -x "$daemon" || exit 0
test -x "$logger_daemon" || exit 0
start_varnishncsa() {
ncsa_output=$(/bin/tempfile -s.varnish)
logger_output=$(/bin/tempfile -s.varnish_ncsa_logger)
log_daemon_msg "Starting $desc" "$name"
create_pid_directory
if start-stop-daemon --start --quiet --pidfile "$pidfile" \
--chuid "$USER" --exec "$daemon" -- "${daemon_opts[@]}" \
> "$ncsa_output" 2>&1; then
log_end_msg 0
else
log_end_msg 1
cat "$ncsa_output"
exit 1
fi
log_daemon_msg "Starting $desc" "$logger_name"
if start-stop-daemon --make-pidfile --start --background --quiet --pidfile ${logger_pidfile} \
--exec ${logger_daemon} -- ${logger_daemon_opts} \
> ${logger_output} 2>&1; then
log_end_msg 0
else
log_end_msg 1
cat $logger_output
exit 1
fi
rm "$ncsa_output" "$logger_output"
}
stop_varnishncsa(){
log_daemon_msg "Stopping $desc" "$name"
if start-stop-daemon --stop --quiet --pidfile "$pidfile" \
--retry 10 --exec "$daemon"; then
log_end_msg 0
else
log_end_msg 1
fi
log_daemon_msg "Stopping $desc" "$logger_name"
if start-stop-daemon --stop --quiet --pidfile "$logger_pidfile"\
--oknodo --retry 10 --exec "$logger_daemon"; then
log_end_msg 0
else
log_end_msg 1
fi
}
reload_varnishncsa(){
log_daemon_msg "Reloading $desc" "$name"
if kill -HUP $(cat "$pidfile") >/dev/null 2>&1; then
log_end_msg 0
else
log_end_msg 1
exit 1
fi
}
status_varnishncsa(){
status_of_proc -p "$pidfile" "$daemon" "$name"
status_of_proc -p "$logger_pidfile" "$logger_daemon" "$logger_name"
}
create_pid_directory() {
install -o "$USER" -g "$USER" -d $(dirname $pidfile)
}
case "$1" in
start)
start_varnishncsa
;;
stop)
stop_varnishncsa
;;
reload)
reload_varnishncsa
;;
status)
status_varnishncsa
;;
restart|force-reload)
$0 stop
$0 start
;;
*)
log_success_msg "Usage: $0 {start|stop|restart|force-reload|reload}"
exit 1
;;
esac
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment