当前位置: 首页 > 知识库问答 >
问题:

如何设置将在aws ec2 ubuntu 16.04实例上运行jar文件的服务

胡翔
2023-03-14

demo.service-demo loaded:loaded(/etc/systemd/system/demo.service;enabled;供应商预置:enabled)

活动:自2018-07-13周五10:38:19 IDT以来不活动(死亡);14s之前的进程:1077 execstop=/usr/local/bin/demo.sh stop(CODE=exited,status=0/success)

进程:1063 execstart=/usr/local/bin/demo.sh start(code=exited,status=0/success)

7月13日10:38:19 ip-172-31-38-145系统D[1]:开始演示...

7月13日10:38:19 ip-172-31-38-145演示。SH[1063]:开始演示...

7月13日10:38:19 ip-172-31-38-145 demo.sh[1063]:开始演示...

7月13日10:38:19 ip-172-31-38-145演示。SH[1077]:演示采矿...

7月13日10:38:19 ip-172-31-38-145 demo.sh[1077]://usr/local/bin/demo.sh:20:kill:没有这样的进程

7月13日10:38:19 ip-172-31-38-145演示。SH[1077]:演示停止...

7月13日10:38:19 ip-172-31-38-145 SystemD[1]:开始演示。

因为我运行的是一个侦听端口443的spring boot应用程序,所以我必须以sudo的形式运行它,当我在nohup命令之前添加sudo时,我得到的是…

demo.service-demo loaded:loaded(/etc/systemd/system/demo.service;enabled;供应商预置:enabled)

活动:自2018-07-13周五10:53:33 IDT以来不活动(死亡);3s以前的进程:1439 execstop=/usr/local/bin/demo.sh stop(code=exited,status=0/success)

进程:1433 execstart=/usr/local/bin/demo.sh start(code=exited,status=0/success)

7月13日10:53:33 ip-172-31-38-145苏多[1434]:根:tty=未知;PWD=/;user=root;command=/usr/bin/nohup java-jar/demo.jar/tmp

Jul 13 10:53:33 ip-172-31-38-145 sudo[1434]:pam_unix(Sudo:session):由(UID=0)为用户根打开的会话

7月13日10:53:33 ip-172-31-38-145 sudo[1434]:pam_unix(Sudo:session):用户根关闭会话

7月13日10:53:33 ip-172-31-38-145演示。SH[1439]:演示采矿...

7月13日10:53:33 ip-172-31-38-145 demo.sh[1439]://usr/local/bin/demo.sh:20:kill:没有这样的进程

7月13日10:53:33 ip-172-31-38-145演示。SH[1439]:演示停止...

7月13日10:53:33 ip-172-31-38-145 SystemD[1]:开始演示。

我的文件/usr/local/bin/demo.sh

#!/bin/sh
SERVICE_NAME=demo
PATH_TO_JAR=/demo.jar
PID_PATH_NAME=/tmp/demo-pid
case $1 in
    start)
        echo "Starting $SERVICE_NAME ..."
        if [ ! -f $PID_PATH_NAME ]; then
            sudo nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &
                        echo $! > $PID_PATH_NAME
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is already running ..."
        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
        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
            echo "$SERVICE_NAME starting ..."
            sudo  nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &
                        echo $! > $PID_PATH_NAME
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
esac

和在/etc/systemd/system/demo.service中具有执行权限的文件

[Unit]
Description=demo
After=syslog.target

[Service]
Type = forking
ExecStart = /usr/local/bin/demo.sh start
ExecStop = /usr/local/bin/demo.sh stop
ExecReload = /usr/local/bin/demo.sh reload


[Install]
WantedBy=multi-user.target

恳求建议。:)

共有1个答案

牧璞
2023-03-14

因此,我试图在一个AWS EC2实例上作为服务运行一个spring boot应用程序,发现一些很好的小袋子阻止了我达到目标…

>

  • 始终使用绝对目录

    在spring boot Application.property文件中写入您的keystore目录(不同的服务正在使用它),该文件指向即时目录,而不是您的项目,即使keystore.p12文件位于项目中。

    server.port=443

    server.ssl.key-store=/home/ubuntu/keystore.p12

    server.ssl.key-store-password=changeme

    server.ssl.keystoreType=PKCS12

    server.ssl.keyalias=tomcat

    [Unit]
    Description=demo
    After=syslog.target
    
    [Service]
    ExecStart = /home/ubuntu/scripts/demo.sh
    
    [Install]
    WantedBy=multi-user.target
    
    #!/bin/bash
    sudo java -jar /home/ubuntu/demo.jar
    

  •  类似资料:
    • 问题内容: 因为我们知道,我们可以设置在在 日食。但是,当我将该项目打包到一个可运行的jar文件中时,如何通过运行jar来设置? 非常感谢! 问题答案: 尝试文件名。 我找到了这个选项,Java选项-Xmx代表什么?并在例如启动Netbeans时使用它。 这样使用 info: 指定内存分配池的最大大小(以字节为单位)。此值必须是大于2MB的1024的倍数。追加字母k或K表示千字节,或者追加m或M表

    • 我有一个从Eclipse导出的jar文件(Runnable JAR 在java中,如果在清单中设置主类。可以运行的xml: 如果您想在jar文件中运行另一个主类,或者如果您没有在清单中设置主类。可以运行的xml: 在Hadoop中,如果在清单中设置了main类。可以运行的xml: 如果您键入: 它将MyOtherMainClass视为jar原始主类的“args”数组中的参数(而不是要运行的类)。

    • 问题内容: 我已使用以下语句使用此博客中的java文件创建了jar文件 现在我已经尝试通过命中和尝试各种命令在hadoop中运行此jar 1个 输出: 2。 输出: 如何在hadoop中运行jar?根据程序需要,我具有正确的DFS位置。 问题答案: 我能够重现您的问题。问题是您要在哪里创建罐子。 基本上,要打包到jar中的目录在查找主类文件时会混淆jar文件。相反,如果您尝试这样做: 例如,将类文

    • 问题内容: 我有一个名为helloworld.jar的JAR文件。为了运行它,我在命令行窗口中执行以下命令: 这可以正常工作,但是我如何双击执行它?我需要安装任何软件吗? 问题答案: 最简单的方法可能是升级或重新安装Java Runtime Environment(JRE)。 或这个: 打开Windows资源管理器,从“工具”中选择“文件夹选项…” 单击文件类型选项卡,向下滚动并选择JAR文件类型

    • 问题内容: 我创建了一个JAR文件,如下所示: 我通过双击运行了这个JAR文件(它不起作用)。因此,我从DOS提示符运行了它,如下所示: 它引发了“无法加载主类”异常。所以我提取了这个JAR文件: 我运行了类文件: 运行良好。我不知道为什么JAR文件不起作用。请告诉我运行JAR文件的步骤 问题答案: 你需要在jar文件清单中指定Main-Class。 Oracle的教程包含完整的演示,但是这是从头

    • 问题内容: 我正在使用GlassFish来提供Java EE Web应用程序。在我本地的开发机器上一切正常。我有 将postgres JDBC库复制到正确的位置 在Glassfish管理控制台中配置了连接池和JDBC资源 部署了使用上述连接的网络应用 在我的浏览器中看到了结果 我正在尝试将同一应用程序部署到AWS Elastic Beanstalk托管的Glassfish实例。AWS- EB使用D