Roberto Moutinho

Linux

Custom Log Format no varnishncsa

by on Apr.26, 2012, under Linux, Varnish

Para quem precisa definir um padrão diferente do “apache commons log” para servidores Varnish… esta tarefa trivial esconde um problema chato de solucionar.

De acordo com a documentação (varnishncsa), o parametro -F serve exatamente para este proposito. Mas nem tudo são flores, pois ao tentar declarar este padrão direto ao DAEMON_OPTS do init script (/etc/init.d/varnishncsa – redhat/centos) o processo silenciosamente entra em modo “default” e segue sem erros…

O problema mora nas aspas que precisam ser “escaped” corretamente (+ info) e acabam por se misturar com as aspas do atributo.

A forma mais simples de contornar este problema é trabalhar com mais um atributo e adiciona-lo na execução, conforme o script abaixo:

#! /bin/sh
#
# varnishncsa Control the Varnish NCSA logging daemon
#
# chkconfig: - 90 10
# description: Varnish Cache logging daemon
# processname: varnishncsa
# config: 
# pidfile: /var/run/varnishncsa.pid

### BEGIN INIT INFO
# Provides: varnishncsa
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start:
# Default-Stop:
# Short-Description: start and stop varnishncsa
# Description: Varnish Cache NCSA logging daemon
### END INIT INFO

# Source function library.
. /etc/init.d/functions

retval=0
pidfile="/var/run/varnishncsa.pid"
lockfile="/var/lock/subsys/varnishncsa"
logfile="/var/log/varnish/varnishncsa.log"

exec="/usr/bin/varnishncsa"
prog="varnishncsa"

LOG_FORMAT="-F \"\"%{X-IP}i\" %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\"\""
DAEMON_OPTS="-c -a -w $logfile -P $pidfile -D"

# Include varnishncsa defaults
[ -e /etc/sysconfig/varnishncsa ] && . /etc/sysconfig/varnishncsa

start() {

	if [ ! -x $exec ]
	then
		echo $exec not found
		exit 5
	fi

	echo -n "Starting varnish ncsa logging daemon: "

	daemon --pidfile $pidfile $exec "$DAEMON_OPTS" "$LOG_FORMAT"
	echo
	return $retval
}

stop() {
	echo -n "Stopping varnish ncsa logging daemon: "
	killproc -p $pidfile $prog
	retval=$?
	echo
	[ $retval -eq 0 ] && rm -f $lockfile
	return $retval
}

restart() {
	stop
	start
}

reload() {
	restart
}

force_reload() {
	restart
}

rh_status() {
	status -p $pidfile $prog
}

rh_status_q() {
	rh_status >/dev/null 2>&1
}

# See how we were called.
case "$1" in
	start)
		rh_status_q && exit 0
		$1
		;;
	stop)
		rh_status_q || exit 0
		$1
		;;
	restart)
		$1
		;;
	reload)
		rh_status_q || exit 7
		$1
		;;
	force-reload)
		force_reload
		;;
	status)
		rh_status
		;;
	condrestart|try-restart)
		rh_status_q || exit 0
		restart
		;;
	*)
	echo "Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"

	exit 2
esac

exit $?

Leave a Comment more...

Checar se processo está rodando – Shell script para processos 24/7

by on Apr.25, 2012, under Linux

Para processos criticos 24/7, que inexplicavelmente (ou explicavelmente) tem o habito de terminarem sua execução, segue um pequeno shell script para ajudá-los na tarefa de mantê-los no ar e evitar ter de trabalhar via VPN 3:00am.

#!/bin/bash

cd /directory/where/your/process/is

process='com.yourdomain.yourProcess'


if [ "$1" == 'stop' ]
        then
                ps -ef | grep -v grep | grep $process
                if [ $? -eq 1 ]
                        then
                                echo "yourProcess [STOP] - No process found"
                        else
                                kill -9 `ps -ef | awk '/[c]om.yourdomain.yourProcess/{print $2}'`
                                echo "yourProcess [STOP] - Stopped"
                fi
        else
                ps -ef | grep -v grep | grep $process
                if [ $? -eq 1 ]
                        then
                                java -cp .:../lib/mysql-connector-java-5.1.16.jar com.yourdomain.yourProcess & > /dev/null
                                echo $$ > yourProcess.pid
                                echo "yourProcess [START] - Process started. Check logs for runtime problems"
                        else
                                echo "yourProcess [WARNING] - Process already running"
                fi
fi

 

Para isso… basta colocar este processo no cron para verificar de 5 em 5 minutos se o processo ainda está sendo executado.

Leave a Comment more...

Procurando por alguma coisa ?

Archives

All entries, chronologically...