197 lines
4 KiB
Text
197 lines
4 KiB
Text
|
#!/bin/bash
|
||
|
#
|
||
|
# traefik Manage the traefik agent
|
||
|
#
|
||
|
# chkconfig: 2345 95 95
|
||
|
# description: traefik is a tool for service discovery and configuration
|
||
|
# processname: traefik
|
||
|
# config: /etc/traefik.conf
|
||
|
# pidfile: /var/run/traefik.pid
|
||
|
|
||
|
### BEGIN INIT INFO
|
||
|
# Provides: traefik
|
||
|
# Required-Start: $local_fs $network
|
||
|
# Required-Stop:
|
||
|
# Should-Start:
|
||
|
# Should-Stop:
|
||
|
# Default-Start: 2 3 4 5
|
||
|
# Default-Stop: 0 1 6
|
||
|
# Short-Description: Manage the traefik agent
|
||
|
# Description: traefik is a tool for service discovery and configuration
|
||
|
### END INIT INFO
|
||
|
|
||
|
# source function library
|
||
|
. /etc/rc.d/init.d/functions
|
||
|
|
||
|
prog="traefik"
|
||
|
exec="/usr/local/bin/$prog"
|
||
|
pidfile="/var/run/$prog.pid"
|
||
|
lockfile="/var/lock/subsys/$prog"
|
||
|
logfile="/var/log/$prog"
|
||
|
confdir="/etc/traefik.d"
|
||
|
|
||
|
# pull in sysconfig settings
|
||
|
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
|
||
|
|
||
|
user=${TRAEFIK_USER:-traefik}
|
||
|
group=${TRAEFIK_GROUP:-traefik}
|
||
|
|
||
|
export GOMAXPROCS=${GOMAXPROCS:-2}
|
||
|
|
||
|
start() {
|
||
|
[ -x $exec ] || exit 5
|
||
|
|
||
|
[ -d $confdir ] || exit 6
|
||
|
|
||
|
umask 077
|
||
|
|
||
|
touch $logfile $pidfile
|
||
|
chown "$user:$group" $logfile $pidfile
|
||
|
|
||
|
echo -n $"Starting $prog: "
|
||
|
|
||
|
## holy shell shenanigans, batman!
|
||
|
## daemon can't be backgrounded. we need the pid of the spawned process,
|
||
|
## which is actually done via runuser thanks to --user.
|
||
|
## you can't do "cmd &; action" but you can do "{cmd &}; action".
|
||
|
## traefik 0.2.1 added -pid-file; although the following creates $pidfile
|
||
|
## owned by traefik:traefik, using -pid-file results in a permission error.
|
||
|
daemon \
|
||
|
--pidfile=$pidfile \
|
||
|
--user="$user" \
|
||
|
" { $exec agent -config-dir=$confdir &>> $logfile & } ; echo \$! >| $pidfile "
|
||
|
|
||
|
RETVAL=$?
|
||
|
echo
|
||
|
|
||
|
[ $RETVAL -eq 0 ] && touch $lockfile
|
||
|
|
||
|
echo -n $"Waiting for traefik ready: "
|
||
|
|
||
|
## wait up to 60s for the rpc port to become listened-upon
|
||
|
## traefik 0.2.1 got much slower to start!
|
||
|
count=0
|
||
|
ready=0
|
||
|
pid=$( cat ${pidfile} )
|
||
|
while checkpid ${pid} && [ $count -lt 60 ] && [ $ready -ne 1 ]; do
|
||
|
count=$(( count + 1 ))
|
||
|
|
||
|
if netstat -lptn | egrep -q ":8400.*LISTEN +${pid}/" ; then
|
||
|
ready=1
|
||
|
else
|
||
|
sleep 1
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if [ $ready -eq 1 ]; then
|
||
|
RETVAL=0
|
||
|
success
|
||
|
else
|
||
|
RETVAL=1
|
||
|
failure
|
||
|
fi
|
||
|
|
||
|
echo
|
||
|
return $RETVAL
|
||
|
}
|
||
|
|
||
|
stop() {
|
||
|
echo -n $"Shutting down $prog: "
|
||
|
|
||
|
## graceful shutdown with leave
|
||
|
$exec leave &> /dev/null
|
||
|
RETVAL=$?
|
||
|
|
||
|
## wait up to 10s for the daemon to exit
|
||
|
if [ $RETVAL -eq 0 ]; then
|
||
|
count=0
|
||
|
stopped=0
|
||
|
pid=$( cat ${pidfile} )
|
||
|
while [ $count -lt 10 ] && [ $stopped -ne 1 ]; do
|
||
|
count=$(( count + 1 ))
|
||
|
|
||
|
if ! checkpid ${pid} ; then
|
||
|
stopped=1
|
||
|
else
|
||
|
sleep 1
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if [ $stopped -ne 1 ]; then
|
||
|
RETVAL=125
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if [ $RETVAL -eq 0 ]; then
|
||
|
success
|
||
|
rm -f $lockfile $pidfile
|
||
|
else
|
||
|
failure
|
||
|
fi
|
||
|
|
||
|
echo
|
||
|
return $RETVAL
|
||
|
}
|
||
|
|
||
|
restart() {
|
||
|
stop
|
||
|
start
|
||
|
}
|
||
|
|
||
|
reload() {
|
||
|
echo -n $"Reloading $prog: "
|
||
|
killproc -p $pidfile $exec -HUP
|
||
|
echo
|
||
|
}
|
||
|
|
||
|
force_reload() {
|
||
|
restart
|
||
|
}
|
||
|
|
||
|
rh_status() {
|
||
|
status -p "$pidfile" -l $prog $exec
|
||
|
|
||
|
RETVAL=$?
|
||
|
|
||
|
[ $RETVAL -eq 0 ] && $exec members
|
||
|
|
||
|
return $RETVAL
|
||
|
}
|
||
|
|
||
|
rh_status_q() {
|
||
|
rh_status >/dev/null 2>&1
|
||
|
}
|
||
|
|
||
|
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 $?
|