как запустить службу инициализации springboot.d от имени пользователя, не являющегося root?

#spring-boot #unix #init.d

#весенняя загрузка #unix #init.d

Вопрос:

Это моя служба springboot, которую я создал в /etc/init.d .

Я запускаю sudo как пользователь springboot и запускаю службу, например

springboot @xxx ~ $ sudo service запуск springboot-smsmgmt.service, который запускает службу от имени пользователя root.

Как я могу запустить его от имени пользователя, не являющегося root (пользователя springboot)?

Пожалуйста, обратите внимание, что я должен запускать команду как sudo (запуск службы sudo springboot-smsmgmt.service)

 #!/bin/sh
SERVICE_NAME=SMS-Gateway
PATH_TO_DEPLOY_DIR=/opt/springboot/smsmgmt
JAR_NAME=smsmgmt.jar
PID_PATH_NAME=/tmp/SMS-Gateway.pid
PROFILE_NAME=ASM
JAVA_PATH=/etc/alternatives/java_sdk_1.8.0/bin/java
JAVA_CONF="-Xms1024m -Xmx2048m -XX:MaxPermSize=512m"

case $1 in
    start)
        echo "Starting $SERVICE_NAME ..."
        PID=$(cat $PID_PATH_NAME);
        if [ -f $PID_PATH_NAME ] amp;amp; [ ! -z "$PID" ] amp;amp;  kill -s 0 $PID; then
           echo "$SERVICE_NAME is already running ..."
        else
           nohup $JAVA_PATH $JAVA_CONF -jar -Dspring.profiles.active=$PROFILE_NAME $PATH_TO_DEPLOY_DIR/$JAR_NAME  > /opt/springboot/smsmgmt/logs/smsapp.log  amp; echo $! > $PID_PATH_NAME
           echo "$SERVICE_NAME started ..."

        fi
    ;;
    stop)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stoping ..."
            kill $PID;
            echo "$SERVICE_NAME stopped ..."
            #rm $PID_PATH_NAME
            cat /dev/null > $PID_PATH_NAME
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
    restart)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stopping ...";
            kill $PID;
            echo "$SERVICE_NAME stopped ...";
            #rm $PID_PATH_NAME
            cat /dev/null > $PID_PATH_NAME
            echo "$SERVICE_NAME starting ..."
            nohup $JAVA_PATH $JAVA_CONF-jar -Dspring.profiles.active=$PROFILE_NAME $PATH_TO_DEPLOY_DIR/$JAR_NAME > /opt/springboot/smsmgmt/logs/smsapp.log amp; echo $! > $PID_PATH_NAME
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
esac
  

Комментарии:

1. 1) службы инициализации обычно запускаются от имени «root» 2) sudo позволяет вам запускать команду от имени любого пользователя (любого пользователя, у которого есть права для запуска). Тааак — если вы хотите запустить скрипт или программу от имени указанного пользователя — тогда просто «sudo» этот скрипт или программу 🙂 Проблема решена 🙂

2. Привет, спасибо за комментарий. Я новичок в Unix и не уверен, как я могу это сделать. Любой пример был бы полезен

3. Похоже, ваш актуальный вопрос: «Как мне автоматически запустить приложение Spring Boot при загрузке системы»? Ответ: «это зависит». В частности, это зависит от версии nix. Если это «рабочий сервер», я бы * определенно обратился за советом к вашему системному администратору. Но посмотрите здесь, в 57.1.1 и 57.1.2, обычные параметры «System V» и «systemd»: docs.spring.io/spring-boot/docs/1.4.0.RC1/reference/html /…

4. Я понял это

Ответ №1:

вот как я это сделал

su — springboot -c «nohup $JAVA_PATH $JAVA_CONF -jar -Dspring.profiles.active=$PROFILE_NAME $PATH_TO_DEPLOY_DIR/$JAR_NAME > /opt/springboot/smsmgmt/logs/smsapp.log amp; echo $! > $PID_PATH_NAME»

  #!/bin/sh
SERVICE_NAME=SMS-Gateway
PATH_TO_DEPLOY_DIR=/opt/springboot/smsmgmt
JAR_NAME=smsmgmt.jar
PID_PATH_NAME=/tmp/SMS-Gateway.pid
PROFILE_NAME=ASM
JAVA_PATH=/etc/alternatives/java_sdk_1.8.0/bin/java
JAVA_CONF="-Xms1024m -Xmx2048m -XX:MaxPermSize=512m"

case $1 in
    start)
        echo "Starting $SERVICE_NAME ..."
        PID=$(cat $PID_PATH_NAME);
        if [ -f $PID_PATH_NAME ] amp;amp; [ ! -z "$PID" ] amp;amp;  kill -s 0 $PID; then
           echo "$SERVICE_NAME is already running ..."
        else
           su - springboot -c "nohup $JAVA_PATH $JAVA_CONF  -jar -Dspring.profiles.active=$PROFILE_NAME $PATH_TO_DEPLOY_DIR/$JAR_NAME  > /opt/springboot/smsmgmt/logs/smsapp.log  amp; echo $! > $PID_PATH_NAME"
           echo "$SERVICE_NAME started ..."

        fi
    ;;
    stop)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stoping ..."
            su - springboot -c "kill $PID";
            echo "$SERVICE_NAME stopped ..."
            #rm $PID_PATH_NAME
            cat /dev/null > $PID_PATH_NAME
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
    restart)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stopping ...";
            su - springboot -c "kill $PID";
            echo "$SERVICE_NAME stopped ...";
            #rm $PID_PATH_NAME
            cat /dev/null > $PID_PATH_NAME
            echo "$SERVICE_NAME starting ..."
            su - springboot -c "nohup $JAVA_PATH $JAVA_CONF  -jar -Dspring.profiles.active=$PROFILE_NAME $PATH_TO_DEPLOY_DIR/$JAR_NAME  > /opt/springboot/smsmgmt/logs/smsapp.log  amp; echo $! > $PID_PATH_NAME"
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
esac