在 Ubuntu 14.04 LTS 中安装 Spring 引导应用程序作为 init.d 服务
Installation of a Spring Boot application as an init.d service in Ubuntu 14.04 LTS
我生成了一个 Spring 启动应用程序。使用 Maven,将 jar 移动到
/var/licence/licence-0.0.1-SNAPSHOT.jar
然后
sudo ln -s /var/licence/licence-0.0.1-SNAPSHOT.jar /etc/init.d/licence
但是当我输入时
lopes@localhost:/var/licence$ service licence start
licence: unrecognized service
这些是/etc/init.d/licence
的属性
lrwxrwxrwx 1 root root 46 Mar 27 18:17 licence -> /var/licence/licence-0.0.1-SNAPSHOT.jar
这是我的 pom.xml:
.....
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
...
据我所知,/etc/init.d 仅存储脚本文件。
您应该将脚本文件放在那里,您可以在其中描述如何 start/stop 您的服务。下面我写了示例脚本,将其保存为 /etc/init.d/license
,您可以 start/stop 这样的服务
sudo service license start
此 resource
中的示例脚本详细信息
#!/bin/sh
SERVICE_NAME=License
PATH_TO_JAR=/var/licence/licence-0.0.1-SNAPSHOT.jar
PID_PATH_NAME=/tmp/License.pid
case in
start)
echo "Starting $SERVICE_NAME ..."
if [ ! -f $PID_PATH_NAME ]; then
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 ..."
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
您最好使用 systemd 单元文件,而不是老式的 /etc/init.d
。 systemd 是大多数 Linux 发行版使用的 init
系统,集成您的服务既容易(见下文)又更强大,因为您可以免费获得监督、日志记录工具、对其他服务的依赖管理等上。
关于您的服务示例,您首先需要在目录 /etc/systemd/system
中放置一个 license.service
,内容如下:
[Unit]
Description=License service by MyCorp
[Service]
ExecStart=/var/licence/licence-0.0.1-SNAPSHOT.jar
User=myuser
Restart=on-failure
[Install]
WantedBy=default.target
然后 运行 这些命令:
#>systemctl daemon-reload
#>systemctl enable license
#>systemctl start license
请注意,SpringBoot 可以创建一个可执行 JAR(即以 shell 脚本开头的 JAR),因此您无需显式调用 java
。请参阅 spring.io documentation 了解如何自定义。
我生成了一个 Spring 启动应用程序。使用 Maven,将 jar 移动到
/var/licence/licence-0.0.1-SNAPSHOT.jar
然后
sudo ln -s /var/licence/licence-0.0.1-SNAPSHOT.jar /etc/init.d/licence
但是当我输入时
lopes@localhost:/var/licence$ service licence start
licence: unrecognized service
这些是/etc/init.d/licence
lrwxrwxrwx 1 root root 46 Mar 27 18:17 licence -> /var/licence/licence-0.0.1-SNAPSHOT.jar
这是我的 pom.xml:
.....
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
...
据我所知,/etc/init.d 仅存储脚本文件。
您应该将脚本文件放在那里,您可以在其中描述如何 start/stop 您的服务。下面我写了示例脚本,将其保存为 /etc/init.d/license
,您可以 start/stop 这样的服务
sudo service license start
此 resource
中的示例脚本详细信息#!/bin/sh
SERVICE_NAME=License
PATH_TO_JAR=/var/licence/licence-0.0.1-SNAPSHOT.jar
PID_PATH_NAME=/tmp/License.pid
case in
start)
echo "Starting $SERVICE_NAME ..."
if [ ! -f $PID_PATH_NAME ]; then
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 ..."
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
您最好使用 systemd 单元文件,而不是老式的 /etc/init.d
。 systemd 是大多数 Linux 发行版使用的 init
系统,集成您的服务既容易(见下文)又更强大,因为您可以免费获得监督、日志记录工具、对其他服务的依赖管理等上。
关于您的服务示例,您首先需要在目录 /etc/systemd/system
中放置一个 license.service
,内容如下:
[Unit]
Description=License service by MyCorp
[Service]
ExecStart=/var/licence/licence-0.0.1-SNAPSHOT.jar
User=myuser
Restart=on-failure
[Install]
WantedBy=default.target
然后 运行 这些命令:
#>systemctl daemon-reload
#>systemctl enable license
#>systemctl start license
请注意,SpringBoot 可以创建一个可执行 JAR(即以 shell 脚本开头的 JAR),因此您无需显式调用 java
。请参阅 spring.io documentation 了解如何自定义。