Назад | Перейти на главную страницу

Хорошая практика для создания сценария для запуска / остановки / перезапуска службы?

Мне было интересно, что является хорошей практикой для создания хорошего скрипта для запуска / остановки / перезапуска какой-либо службы. Я постараюсь пояснить, хорошо? Сейчас я делаю что-то вроде этого: скажем, я хотел бы создать скрипт для start/stop/restart сервис, поэтому я создаю папку /company/service name/ и там положил start.sh и stop.sh, которые выглядят примерно так:

start.sh

#!/bin/bash
#VARIABLES
SERVICE_NAME="<service name>"
USERDEPLOYER="<service name>_deployer"
FOLDER=/company/<service name>/
KEYWORD="<keyword>"

#
#CHECKING SYSTEM STATUS
PROC=`ps -ef | grep $SERVICE_NAME | grep $KEYWORD | grep -v grep | awk -F" " '{ print $2 }'`;

if [ $PROC ]; then
  echo "$SERVICE_NAME is running!"
  echo "Stop then first!"
  exit
fi
###
#
#STARTING
if [[ `/usr/bin/whoami` == $USERDEPLOYER ]]
  then

    pushd .
    echo " "
    echo "Starting $SERVICE_NAME..."
    echo "cd $FOLDER"
    cd $FOLDER
    #COMMAND    
    <command to start the service> &

    sleep 20
    PROC=`ps -ef | grep $SERVICE_NAME | grep $KEYWORD | grep -v grep | awk -F" " '{ print $2 }'`;

    if [ -n "$PROC" ] && [ "$PROC" != "" ]
    then
      echo "OK: system started."
    else
      echo "ERROR: system process not found!"
    fi

    echo "script execution finished!"
    popd

else
  echo "User must be $USERDEPLOYER !"
fi

stop.sh

#!/bin/bash
#VARIABLES
SERVICE_NAME="<service name>"
USERDEPLOYER="<service name>_deployer"
KEYWORD="python"

if [[ `/usr/bin/whoami` == $USERDEPLOYER ]]
  then

    pushd .
    echo "Stopping $SERVICE_NAME......"

    #KILLING PROCESS
    processPID=`ps -ef | grep $SERVICE_NAME | grep $KEYWORD | grep -v grep | awk -F" " '{ print $2 }'`
    echo "Trying to kill process with key $SERVICE_NAME - ignore error messages below."
    kill $processPID
    sleep 10

    while [ -n "$processPID" ]
      do
    echo "Waiting process ($processPID) to shutdown...20s"
    sleep 20
        processPID=`ps -ef | grep $SERVICE_NAME | grep $KEYWORD | grep -v grep | awk -F" " '{ print $2 }'`
      done

    echo "Ensured process with key $SERVICE_NAME is no longer running."
    popd

else
  echo "User must be $USERDEPLOYER !"
fi

После этого создаю пользователя service name_deployer, чем передать право собственности на эту папку и эти скрипты, start.sh и stop.sh, давая разрешение read, write and execute также.

Затем создайте следующий скрипт в /etc/init.d/ так как service name-service :

#!/bin/bash
#
#   Linux chkconfig stuff:
#
#   chkconfig: 2345 56 10
#   2345 56  
#   2345 10  
#   description: <description>
# Source function library.
SERVICE_NAME="<service name>-service"
SERVICE_USER="<service name>_deployer"
FOLDER="/company/<service name>/"

start() {

if [[ `/usr/bin/whoami` == $SERVICE_USER ]]
then
  cd $FOLDER
  ./start.sh

#NOT USER _root
else 
  cd $FOLDER
  su $SERVICE_USER ./start.sh
fi
}

stop() {
  cd $FOLDER
  su $SERVICE_USER ./stop.sh
}

#Body main
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    echo "Restarting $SERVICE_NAME..."
    echo " "
    stop
    sleep 10
    start
    ;;
  *)
    echo $"Usage: $0 {start|stop|restart}"
    exit 1
esac
exit 0

Учитывая право собственности на service name_deployer и разрешение на read, write and execute.

Затем добавьте сервис в список сервисов следующим образом: / sbin / chkconfig --add service name-service (suse и другие) или update-rc.d service name-service значения по умолчанию (ubuntu)

И это все! Вы, ребята, думали, что это хороший подход? Я просто спрашиваю, потому что хотел бы создать хороший стандарт для такого рода скриптов и процедур. Извините, если вы думаете, что это неубедительный вопрос, но для меня очень важна такая процедура.

Спасибо вам, ребята!

Скорее использовать судо для управления доступом пользователей. Создать сценарий в /etc/init.d/ следуя обычным соглашениям. (Скрипты для Ubuntu / Debian должны использовать start-stop-daemon для запуска, остановки с повторными попытками и проверки состояний процесса.) Затем запустите visudo и добавьте соответствующие записи, чтобы пользователи могли управлять этой службой. Например:

User_Alias  SERVICE_USERS = bob, jane
Cmnd_Alias  SERVICE_CMNDS = service service-name

SERVICE_USERS ALL = SERVICE_CMNDS

Затем указанные пользователи могут запускать sudo service service-name start и так далее.

Я думаю, что вы создаете много ненужных сложностей, посмотрите членство в группах и файл / etc / sudoers. С помощью этих инструментов вы можете давать очень конкретные разрешения службам и файлам в системе. Его легче администрировать, он переживет обновления и позволит вам добавлять и удалять пользователей гораздо более централизованным, но детализированным образом.

Ник