Aller au contenu

Avoir un service en double


otto

Messages recommandés

Bonjours!

Décidément le schellscript et moi ca fait 2.

Je cherche a lancer 2 proxy squid configurer différemment :

- le premier lit sa conf dans /etc/squid/squid.conf et utilise le répertoire de cache /var/spool/squid

- le second lit sa conf dans /etc/squid2/squid.conf et utilise le répertoire de cache /var/spool/squid2

J'ai bien changé les noms et emplacement de conf et de cache mais systématiquement ça lance la conf du squid "1"

Je vous mets le srcipt de squid :

#!/bin/bash
# squid		This shell script takes care of starting and stopping
#		Squid Internet Object Cache
#
# chkconfig: - 90 25
# description: Squid - Internet Object Cache. Internet object caching is \
# 	a way to store requested Internet objects (i.e., data available \
# 	via the HTTP, FTP, and gopher protocols) on a system closer to the \
#	requesting site than to the source. Web browsers can then use the \
#	local Squid cache as a proxy HTTP server, reducing access time as \
#	well as bandwidth consumption.
# pidfile: /var/run/squid.pid
# config: /etc/squid/squid.conf

PATH=/usr/bin:/sbin:/bin:/usr/sbin
export PATH
CONFIG=/etc/squid/squid.conf

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

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# check if the squid conf file is present
[ -f /etc/squid/squid.conf ] || exit 0

if [ -f /etc/sysconfig/squid ]; then
 . /etc/sysconfig/squid
fi

# don't raise an error if the config file is incomplete 
# set defaults instead:
SQUID_OPTS=${SQUID_OPTS:-"-D"}
SQUID_PIDFILE_TIMEOUT=${SQUID_PIDFILE_TIMEOUT:-20}
SQUID_SHUTDOWN_TIMEOUT=${SQUID_SHUTDOWN_TIMEOUT:-100}

# determine the name of the squid binary
[ -f /usr/sbin/squid ] && SQUID=squid
[ -z "$SQUID" ] && exit 0

prog="$SQUID"

# determine which one is the cache_swap directory
CACHE_SWAP=`sed -e 's/#.*//g' /etc/squid/squid.conf | \
grep cache_dir |  awk '{ print $3 }'`
[ -z "$CACHE_SWAP" ] && CACHE_SWAP=/var/spool/squid

RETVAL=0

start() {
for adir in $CACHE_SWAP; do
	if [ ! -d $adir/00 ]; then 
	 echo -n "init_cache_dir $adir... "
	 $SQUID -z -F -D >> /var/log/squid/squid.out 2>&1
fi
done
echo -n $"Starting $prog: "
$SQUID $SQUID_OPTS >> /var/log/squid/squid.out 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then 
   timeout=0;
   while :; do
	  [ ! -f /var/run/squid.pid ] || break
  if [ $timeout -ge $SQUID_PIDFILE_TIMEOUT ]; then
	 RETVAL=1
	 break
  fi
  sleep 1 && echo -n "."
  timeout=$((timeout+1))
   done
fi
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$SQUID
[ $RETVAL -eq 0 ] && echo_success
[ $RETVAL -ne 0 ] && echo_failure
echo
return $RETVAL
}

stop() {
echo -n  $"Stopping $prog: "
$SQUID -k check -f $CONFIG >> /var/log/squid/squid.out 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
	$SQUID -k shutdown -f $CONFIG &
	rm -f /var/lock/subsys/$SQUID
timeout=0
	while :; do
	[ -f /var/run/squid.pid ] || break
	if [ $timeout -ge $SQUID_SHUTDOWN_TIMEOUT ]; then
		echo
		return 1
	fi
	sleep 2 && echo -n "." 
	timeout=$((timeout+2))
	done
echo_success
echo 
else
	echo_failure
echo
fi
return $RETVAL
}	

reload() {
$SQUID $SQUID_OPTS -k reconfigure -f $CONFIG 
}

restart() {
stop
start
}	

condrestart() {
[ -e /var/lock/subsys/squid ] && restart || :
}

rhstatus() { 
status $SQUID
$SQUID -k check
}

probe() {
return 0
}	

case "$1" in
start)
start
  ;;

stop)
stop
  ;;

reload)
reload
  ;;

restart)
restart
  ;;

condrestart)
condrestart
  ;;

status)
rhstatus
  ;;

probe)
exit 0
  ;;

*)
echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}"
exit 1
esac

exit $?

edit : petite modif du fichier de conf pour éviter qu'un squid -k reconfigure (ou autre) n'INpact pas toutes les instance de squid en faisant :

squid -k message -f configfile qui ne touchera que le squid lancé avec le fichier de config.

Lien vers le commentaire
Partager sur d’autres sites

determine which one is the cache_swap directory

CACHE_SWAP=`sed -e 's/#.*//g' /etc/squid/squid.conf | \

grep cache_dir | awk '{ print $3 }'`

[ -z "$CACHE_SWAP" ] && CACHE_SWAP=/var/spool/squid

en fait il semblerait que patout dans le script il y ait des chemins en dur , qui ne tiennent pas comptes des variables du départ :D

par exemple sur le bout de code que j'ai mis quoi qu'il arrive , il prend en compte etc/squid/squid.conf

Lien vers le commentaire
Partager sur d’autres sites

À noter en plus de ce qu'on dit les autres :

# check if the squid conf file is present

[ -f /etc/squid/squid.conf ] || exit 0

à virer ou adapter

if [ -f /etc/sysconfig/squid ]; then

. /etc/sysconfig/squid

fi

ahem, il doit sûrment faire des trucs pas désirable celui-là aussi.

Lien vers le commentaire
Partager sur d’autres sites

Bon ben j'ai commencé par épurer le script pour qu'il ne prenne que le fichier de config en compte :

Pour squid 1

#!/bin/bash
# squid		This shell script takes care of starting and stopping
#		Squid Internet Object Cache
#
# chkconfig: - 90 25
# pidfile: /var/run/squid.pid
# config: /etc/squid/squid.conf

PATH=/usr/bin:/sbin:/bin:/usr/sbin
export PATH
CONFIG=/etc/squid/squid.conf
# Source function library.
. /etc/rc.d/init.d/functions

SQUID_PIDFILE_TIMEOUT=${SQUID_PIDFILE_TIMEOUT:-20}
SQUID_SHUTDOWN_TIMEOUT=${SQUID_SHUTDOWN_TIMEOUT:-100}
SQUID=squid
RETVAL=0

start() {
echo -n $"Starting squid: "
$SQUID -f $CONFIG >> /var/log/squid/squid.out 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then 
   timeout=0;
   while :; do
	  [ ! -f /var/run/squid.pid ] || break
  if [ $timeout -ge $SQUID_PIDFILE_TIMEOUT ]; then
	 RETVAL=1
	 break
  fi
  sleep 1 && echo -n "."
  timeout=$((timeout+1))
   done
fi
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$SQUID
[ $RETVAL -eq 0 ] && echo_success
[ $RETVAL -ne 0 ] && echo_failure
echo
return $RETVAL
}

stop() {
echo -n  $"Stopping squid: "
$SQUID -k check -f $CONFIG >> /var/log/squid/squid.out 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
	$SQUID -k shutdown -f $CONFIG &
	rm -f /var/lock/subsys/$SQUID
timeout=0
	while :; do
	[ -f /var/run/squid.pid ] || break
	if [ $timeout -ge $SQUID_SHUTDOWN_TIMEOUT ]; then
		echo
		return 1
	fi
	sleep 2 && echo -n "." 
	timeout=$((timeout+2))
	done
echo_success
echo 
else
	echo_failure
echo
fi
return $RETVAL
}	

reload() {
$SQUID -k reconfigure -f $CONFIG 
}

restart() {
stop
start
}	

condrestart() {
[ -e /var/lock/subsys/squid ] && restart || :
}

rhstatus() { 
status $SQUID
$SQUID -k check
}

probe() {
return 0
}	

case "$1" in
start)
start
  ;;

stop)
stop
  ;;

reload)
reload
  ;;

restart)
restart
  ;;

condrestart)
condrestart
  ;;

status)
rhstatus
  ;;

probe)
exit 0
  ;;

*)
echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}"
exit 1
esac

exit $?

et pour le 2

#!/bin/bash
# squid		This shell script takes care of starting and stopping
#		Squid Internet Object Cache
#
# chkconfig: - 90 25
# pidfile: /var/run/squid.pid
# config: /etc/squid/squid.conf

PATH=/usr/bin:/sbin:/bin:/usr/sbin
export PATH
CONFIG=/etc/squid2/squid.conf
# Source function library.
. /etc/rc.d/init.d/functions

SQUID_PIDFILE_TIMEOUT=${SQUID_PIDFILE_TIMEOUT:-20}
SQUID_SHUTDOWN_TIMEOUT=${SQUID_SHUTDOWN_TIMEOUT:-100}
SQUID=squid
RETVAL=0

start() {
echo -n $"Starting squid: "
$SQUID -f $CONFIG >> /var/log/squid2/squid.out 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then 
   timeout=0;
   while :; do
	  [ ! -f /var/run/squid.pid ] || break
  if [ $timeout -ge $SQUID_PIDFILE_TIMEOUT ]; then
	 RETVAL=1
	 break
  fi
  sleep 1 && echo -n "."
  timeout=$((timeout+1))
   done
fi
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/squid2
[ $RETVAL -eq 0 ] && echo_success
[ $RETVAL -ne 0 ] && echo_failure
echo
return $RETVAL
}

stop() {
echo -n  $"Stopping squid: "
$SQUID -k check -f $CONFIG >> /var/log/squid2/squid.out 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
	$SQUID -k shutdown -f $CONFIG &
	rm -f /var/lock/subsys/squid2
timeout=0
	while :; do
	[ -f /var/run/squid.pid ] || break
	if [ $timeout -ge $SQUID_SHUTDOWN_TIMEOUT ]; then
		echo
		return 1
	fi
	sleep 2 && echo -n "." 
	timeout=$((timeout+2))
	done
echo_success
echo 
else
	echo_failure
echo
fi
return $RETVAL
}	

reload() {
$SQUID -k reconfigure -f $CONFIG 
}

restart() {
stop
start
}	

condrestart() {
[ -e /var/lock/subsys/squid2 ] && restart || :
}

rhstatus() { 
status $SQUID
$SQUID -k check -f $CONFIG
}

probe() {
return 0
}	

case "$1" in
start)
start
  ;;

stop)
stop
  ;;

reload)
reload
  ;;

restart)
restart
  ;;

condrestart)
condrestart
  ;;

status)
rhstatus
  ;;

probe)
exit 0
  ;;

*)
echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}"
exit 1
esac

exit $?

Les 2 scripts lancent les bon squid avec les bonnes conf s'il y a une seule instance.

Pour 2 ca merde encore à cause du .PID.

Lien vers le commentaire
Partager sur d’autres sites

quand je vois

SQUID=squid
RETVAL=0

start() {
echo -n $"Starting squid: "
$SQUID -f $CONFIG >> /var/log/squid/squid.out 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
   timeout=0;
   while :; do
	  [ ! -f /var/run/squid.pid ] || break
  if [ $timeout -ge $SQUID_PIDFILE_TIMEOUT ]; then
	 RETVAL=1
	 break
  fi
  sleep 1 && echo -n "."
  timeout=$((timeout+1))
   done
fi
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$SQUID
[ $RETVAL -eq 0 ] && echo_success
[ $RETVAL -ne 0 ] && echo_failure
echo
return $RETVAL
}

Je suis tenté de dire que $SQUID (qui pointe soit vers /usr/bin/squid soit vers /sbin/squid soit vers /bin/squid soit vers /usr/sbin/squid) écrit en dur le pid dans /var/run/squid.pid

De deux chose l'une : soit $SQUID est un scripte dans lequel tu peux configurer le fichier stockant le pid, soit c'est un exécutable.

Si c'est un scripte, il va te falloir le dupliquer et changer à la mano dedans.

Si c'est un exécutable, soit c'est une option qui se configure (auquel cas, tu mets des nom différents dans tes deux fichiers de confs), soit ça ne se configure pas (ce serait vraiment mal foutu pour un truc aussi utilisé) et tu l'as :D (ie recompilation avec un patch pour changer le ficheir en question...)

Lien vers le commentaire
Partager sur d’autres sites

ya pas de soucis dans $SQUID c'est l'executable de squid... et ce magnifique programme dans son fichier de config permet de specifiger le fichier pid à utiliser. C'est pour cela je pense qu'on ne passe pas par les fonctions habituelles des scripts d'init style daemon, killproc etc

Donc a priori il va pouvoir s'en sortir et avoir ces 2 squids. Je me pose quand même une question, les 2 process squid vont être lancé sous le meme utilisateur, est-ce que la limite du nombre max de fichiers ouverts (ulimit -n) est par process ou par utilisateur (jme souviens jamais)? parceque c'est critique pour squid vu que celui-ci ouvre un max de fichier, s'il atteind la limite 2x plus rapidement...

EDIT: bon je viens de tester ça a l'air d'être par process

Lien vers le commentaire
Partager sur d’autres sites

ya pas de soucis dans $SQUID c'est l'executable de squid... et ce magnifique programme dans son fichier de config permet de specifiger le fichier pid à utiliser. C'est pour cela je pense qu'on ne passe pas par les fonctions habituelles des scripts d'init style daemon, killproc etc

Donc a priori il va pouvoir s'en sortir et avoir ces 2 squids. Je me pose quand même une question, les 2 process squid vont être lancé sous le meme utilisateur, est-ce que la limite du nombre max de fichiers ouverts (ulimit -n) est par process ou par utilisateur (jme souviens jamais)? parceque c'est critique pour squid vu que celui-ci ouvre un max de fichier, s'il atteind la limite 2x plus rapidement...

EDIT: bon je viens de tester ça a l'air d'être par process

Dans mon cas, il y a relativement peu de donnée a mettre en cache.

Vu que squid et le multicore c'est pas super terrible a ce que j'ai lu, autant mettre 2 squid avec des rôles différents par machine (sur plusieurs machines avec load balancer dans le coin) qu'un squid par machine qui ne saura pas utiliser les ressources dispo.

Enfin bon ca marche!

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...