Linux
Custom Log Format no varnishncsa
by moutinho 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 $?
Checar se processo está rodando – Shell script para processos 24/7
by moutinho 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.