【问题标题】:how to run springboot init.d service as non root user?如何以非 root 用户身份运行 spring boot init.d 服务?
【发布时间】:2021-01-28 11:47:50
【问题描述】:

这是我在 /etc/init.d 下创建的 springboot 服务。

我作为 springboot 用户 sudo 并运行类似的服务

springboot@xxx~$ sudo service springboot-smsmgmt.service start 以root用户身份启动服务。

如何以非 root 用户(springboot 用户)运行它?

请注意,我必须以 sudo 运行命令(sudo service springboot-smsmgmt.service start)

#!/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 ] && [ ! -z "$PID" ] &&  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  & 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 & echo $! > $PID_PATH_NAME
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
esac

【问题讨论】:

  • 1) init.d 服务通常以“root”身份运行 2) sudo 允许您以 any 用户身份运行命令(您有权运行的任何用户作为)。 Sooooo - 如果您想以指定用户身份运行脚本或程序 - 然后只需“sudo”该脚本或程序 :) 问题解决了 :)
  • 您好,感谢您的评论。我是 Unix 新手,不知道该怎么做。任何示例都会有所帮助
  • 听起来您的 实际 问题是“如何在系统启动时自动启动我的 Spring Boot 应用程序”?答案是“视情况而定”。特别是,它取决于 nix 的哪个版本。如果这是“生产服务器”,我*肯定会向您的系统管理员寻求指导。但是请看这里,在 57.1.1 和 57.1.2 中查看惯用选项“System V”和“systemd”:docs.spring.io/spring-boot/docs/1.4.0.RC1/reference/html/…
  • 我想通了

标签: spring-boot unix init.d


【解决方案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 & 回显 $!> $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 ] && [ ! -z "$PID" ] &&  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  & 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  & echo $! > $PID_PATH_NAME"
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
esac

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 2013-07-02
    • 2017-02-06
    • 1970-01-01
    • 2021-02-07
    • 2017-07-08
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多