#!/bin/bash Script="${0} ${*}" function usage { echo "Usage: ${0} [--restart] [--stop] [--once] [--sleep_sec=]" exit 1 } for arg in "${@}" do case ${arg} in --restart) Restart=Y shift ;; --stop) Stop="Y" shift ;; --once) Once="Y" shift ;; --sleep_sec=*) SleepSec="${arg#*=}" shift ;; -*|--*) usage ;; *) ;; esac done if [ "${SleepSec}" == "" ] then SleepSec=5 fi RootDir=/home/cvtt/prod CfgSvcDir=${RootDir}/config_service export PYTHONPATH="${RootDir}:${PYTHONPATH}" Name=config_server ServerPy="${RootDir}/cvttpy/apps/utils/config_server.py" ServicePort=6789 ServiceDir=${CfgSvcDir}/data LogDir=${RootDir}/logs source ${HOME}/.pyenv/python3.10-venv/bin/activate export PYTHONPATH="${RootDir}:${PYTHONPATH}" Cmd="nohup" Cmd="${Cmd} python3" Cmd="${Cmd} ${ServerPy}" Cmd="${Cmd} --port=${ServicePort}" Cmd="${Cmd} --root=${ServiceDir}" Cmd="${Cmd} --log_file=${LogDir}/%T.config_service.log" function start_it { echo ${Cmd} eval ${Cmd} & sleep 10 } function check_it { if !(timeout 3 curl -s localhost:${AdminPort}/ping > /dev/null) then echo "${Script} doesn't respond. restarting..." start_app pids=$(ps -ef | grep "port=${ServicePort}" | grep "root=${ServiceDir}" | grep -v grep | tr -s ' ' |cut -d' ' -f2) echo pids=${pids} if [ "${pids}" != "" ] then kill -9 ${pids} fi start_it fi } function kill_it { pids=$(ps -ef |grep $(basename ${0}) |grep -v ${$} |grep -v grep |tr -s ' ' |cut -d' ' -f2) if [ "${pids}" != "" ] then echo "Killing ${pids} ..." kill -9 ${pids} fi while (timeout 3 curl -s localhost:${AdminPort}/ping > /dev/null) do echo "Shutting down localhost:${AdminPort}/shutdown ..." timeout 10 curl -s localhost:${AdminPort}/shutdown done } if [ "${Stop}" == "Y" ] ; then kill_it exit 0 fi if [ "${Once}" == "Y" ] ; then start_it exit 0 fi if [ "${Restart}" == "Y" ] then kill_it fi start_it while true do check_it echo "${Script} is checked" | /usr/bin/ts '[%Y-%m-%d %H:%M:%S]' sleep ${SleepSec} done