我希望您能帮助我解决尝试设置将在aws ec2 ubuntu 16.04实例上运行jar文件的服务时遇到的问题。 这是我在运行systemctl status demo.service后得到的输出
●demo.service-演示 已加载:已加载(/etc/systemd/system/demo.service;已启用;供应商预设:已启用)
有效:自2018年7月13日星期五以来一直无效(已死)IDT; 14s前 进程:1077 ExecStop = / usr / local / bin / demo.sh停止(代码=已退出,状态= 0 /成功)
进程:1063 ExecStart = / usr / local / bin / demo.sh开始(代码=已退出,状态= 0 /成功)
7月13日10:38:19 ip-172-31-38-145 systemd [1]:正在启动演示...
Jul 13 10:38:19 ip-172-31-38-145 demo.sh [1063]:正在启动演示...
7月13日10:38:19 ip-172-31-38-145 demo.sh [1063]:演示已开始...
Jul 13 10:38:19 ip-172-31-38-145 demo.sh [1077]:演示正在停止...
7月13日10:38:19 ip-172-31-38-145 demo.sh [1077]:/usr/local/bin/demo.sh:20:杀死:没有这样的过程
Jul 13 10:38:19 ip-172-31-38-145 demo.sh [1077]:演示已停止...
7月13日10:38:19 ip-172-31-38-145 systemd [1]:开始演示。
因为我正在运行一个侦听端口443的spring boot应用程序,所以我必须将它作为sudo运行,并且当在nohup命令之前添加sudo时,我会得到这个..
●demo.service-演示 已加载:已加载(/etc/systemd/system/demo.service;已启用;供应商预设:已启用)
有效:自2018年7月13日星期五以来无效(已死) 3秒前 进程:1439 ExecStop = / usr / local / bin / demo.sh停止(代码=已退出,状态= 0 /成功)
进程:1433 ExecStart = / usr / local / bin / demo.sh开始(代码=已退出,状态= 0 /成功)
7月13日10:53:33 ip-172-31-38-145 systemd [1]:正在启动演示...
Jul 13 10:53:33 ip-172-31-38-145 demo.sh [1433]:正在启动演示...
7月13日10:53:33 ip-172-31-38-145 demo.sh [1433]:演示已开始...
Jul 13 10:53:33 ip-172-31-38-145 sudo [1434]:root:TTY = unknown; PWD = /; USER = root; COMMAND = / usr / bin / nohup java -jar /demo.jar / tmp
7月13日10:53:33 ip-172-31-38-145 sudo [1434]:pam_unix(sudo:session):用户(uid = 0)为root用户打开了会话
7月13日10:53:33 ip-172-31-38-145 sudo [1434]:pam_unix(sudo:session):用户root会话已关闭
7月13日10:53:33 ip-172-31-38-145 demo.sh [1439]:演示正在停止...
7月13日10:53:33 ip-172-31-38-145 demo.sh [1439]:/usr/local/bin/demo.sh:20:杀死:没有这样的过程
Jul 13 10:53:33 ip-172-31-38-145 demo.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
请咨询.. :)
答案 0 :(得分:2)
因此,我试图在作为服务的AWS EC2实例上运行Spring Boot应用程序,发现一些漂亮的小袋子阻止了我实现自己的目标..
在spring boot application中写入您的密钥库目录(正在使用不同的服务)。即使keystore.p12文件位于项目中,该属性文件也指向即时目录而不是您的项目。 p>
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
3。保持服务单元文件(/etc/systemd/system/demo.service)干净简单,并在此处使用绝对路径。
a great how to with a simple explanation
[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
我还发现,一旦您尝试运行加密的连接,一旦弹簧启动大叫,与该端口有关的错误就不会真正成立。在我的情况下,它不仅连接到密钥库文件及其位置,而且不仅仅在这种情况下。
享受..
答案 1 :(得分:0)
您可以在ubuntu ec2实例中使用rc.local在启动时启动应用程序(.jar)。只需在exit 0
行之前在rc.local中包含.jar可执行执行代码,如下所示,要修改rc.local,您应该具有root用户访问权限。因此,请按以下方式访问它,
sudo vi /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Example Code Execution
java -jar sampleExecutionPackage.jar
exit 0
之后,如果您需要检查正在运行的应用程序的状态,则可以检查是否使用
sudo systemctl status rc-local.service
您可以使用start/stop/restart
代替status
进行相应的使用。