Запустить, остановить и контролировать выполнение java jar через upstart - PullRequest
0 голосов
/ 27 августа 2018

В Ubuntu 14.04 я хочу управлять процессом Java через upstart. Если он остановлен, он должен быть запущен через upstart.

Запуск и останов Java-процесса управляются с помощью start-saasservice.sh и stop-saasservice.sh, как показано ниже

start-saasservice.sh

#! /bin/bash
DEPLOYMENT_TYPE_FILE=deployment.info
SERVICE_PATH="/home/ubuntu/build-target/saasservice"
COMPONENT_NAME="saasservice"
LOG_ROTATOR="${SERVICE_PATH}/log-rotator.pl --dir=${LOG_PATH}/${COMPONENT_NAME} --file=${COMPONENT_NAME}.STDOUT"

nohup java \
    -XX:OnOutOfMemoryError="kill -9 %p" \
    -Ddeployment_type.path=$DEPLOYMENT_TYPE_FILE \
    -cp $SERVICE_PATH/${COMPONENT_NAME}-0.001-SNAPSHOT.jar com.vnera.SaasListener.ServiceMain \
    $SERVICE_PATH/ServiceThriftListenerConfigTemplate.properties server \
    $SERVICE_PATH/saasconfiguration.yaml \
    2>&1 | ${LOG_ROTATOR}

stop-saasservice.sh

#!/bin/bash

COMPONENT="saasservice"

echo "Stopping saasservice ..."

# Grabs and kill a process from the pidlist that has the jars name
pid=`ps aux | grep "$COMPONENT-0.001-SNAPSHOT.jar" | grep -v grep | awk {'print $2'}`
if [ ! -z "$pid" ]; then echo $pid; kill -9 $pid; fi

#Terminating log-rotator process for saasservice
lrpid=`ps aux | grep "$COMPONENT/log-rotator.pl" | grep -v grep | awk {'print $2'}`
if [ ! -z "$lrpid" ]; then
    echo "$COMPONENT/log-rotator pid - $lrpid";
    kill -9 $lrpid;
fi

echo "saasservice stopped."

После прочтения новой документации я могу написать saasservice.conf двумя способами.

Подход -1 - Вызвать start-saasservice.sh из script и позволить upstart запустить процесс, если его завершат

description "SaasListener Service"

start on (runlevel [2345] and vrni-svcinit-ntp-insync)
stop on (shutdown or vrni-svcinit-ntp-notinsync)

respawn
respawn limit unlimited

env HOME="/home/ubuntu"
env SAASSERVICE_HOME="/home/ubuntu/build-target/saasservice"

script
  echo "[`date +"%h %d %Y %H:%M:%S-%3N"`] Starting SaasListener..."
  mkdir -p $HOME/logs
  chown ubuntu $HOME/logs
  exec su -s /bin/sh -c "(cd $SAASSERVICE_HOME && $SAASSERVICE_HOME/start-saasservice.sh $SAASSERVICE_HOME || true)" ubuntu
  echo "[`date +"%h %d %Y %H:%M:%S-%3N"`] SaasListener started."
end script

post-stop script
  echo "[`date +"%h %d %Y %H:%M:%S-%3N"`] Exiting SaasListener..."
  su -s /bin/sh -c "cd $SAASSERVICE_HOME && $SAASSERVICE_HOME/stop-saasservice.sh" ubuntu
  sleep 1
  echo "[`date +"%h %d %Y %H:%M:%S-%3N"`] SaasListener exited."
end script

Подход 2 - Звоните start-saasservice.sh при предварительном запуске, а затем по script продолжайте проверять, работает ли служба.

description "SAAS Service"

start on (runlevel [2345] and vrni-svcinit-ntp-insync)
stop on (shutdown or vrni-svcinit-ntp-notinsync)

respawn
respawn limit unlimited

env HOME="/home/ubuntu"
env SAASSERVICE_HOME="/home/ubuntu/build-target/saasservice"

pre-start script
  echo "[`date +"%h %d %Y %H:%M:%S-%3N"`] Starting SaasListener..."
  mkdir -p $HOME/logs
  chown ubuntu $HOME/logs
  su -s /bin/sh -c "(cd $SAASSERVICE_HOME && $SAASSERVICE_HOME/start-saasservice.sh $SAASSERVICE_HOME || true)" ubuntu
  echo "[`date +"%h %d %Y %H:%M:%S-%3N"`] SaasListener started."
end script

script
  sleep 3
  while ps -ef | grep -v "grep" | grep -q "saasservice-0.001-SNAPSHOT.jar"; do
    sleep 30
  done
  sleep 1
end script

post-stop script
  echo "[`date +"%h %d %Y %H:%M:%S-%3N"`] Exiting SaasListener..."
  su -s /bin/sh -c "cd $SAASSERVICE_HOME && $SAASSERVICE_HOME/stop-saasservice.sh" ubuntu
  sleep 1
  echo "[`date +"%h %d %Y %H:%M:%S-%3N"`] SaasListener exited."
end script

Я новичок в выскочке. Может кто-нибудь дать мне знать, какой путь рекомендуется?

...