Handle relative pid folder correctly in the launch script

Previously, a relative PID folder was not handled correctly when
running stop, status, or force_reload. This meant that a service
could be started when configured to use a relative pid file, but
then could not be stopped.

The PID folder should be treated as relative to the service's jar
file. This commit updates stop, status, and force_reload to push the
jar file's directory so that this is now the case for those three
commands.

Closes gh-7092
pull/7262/head
Andy Wilkinson 8 years ago
parent 7968c6b548
commit 03deff9a1c

@ -198,6 +198,18 @@ public class SysVinitLaunchScriptIT {
doLaunch("launch-with-use-of-start-stop-daemon-disabled.sh");
}
@Test
public void launchWithRelativePidFolder() throws Exception {
String output = doTest("launch-with-relative-pid-folder.sh");
assertThat(output).has(
coloredString(AnsiColor.GREEN, "Started [" + extractPid(output) + "]"));
assertThat(output).has(
coloredString(AnsiColor.GREEN, "Running [" + extractPid(output) + "]"));
assertThat(output).has(
coloredString(AnsiColor.GREEN, "Stopped [" + extractPid(output) + "]"));
}
private void doLaunch(String script) throws Exception {
assertThat(doTest(script)).contains("Launched");
}

@ -1,6 +1,6 @@
source ./test-functions.sh
echo 'JAVA_OPTS="-Dserver.port=8081 -Dserver.context-path=/test"' > /spring-boot-app.conf
install_service
echo 'JAVA_OPTS="-Dserver.port=8081 -Dserver.context-path=/test"' > /test-service/spring-boot-app.conf
start_service
await_app http://127.0.0.1:8081/test/
curl -s http://127.0.0.1:8081/test/

@ -1,6 +1,6 @@
source ./test-functions.sh
echo 'RUN_ARGS="--server.port=8081 --server.context-path=/test"' > /spring-boot-app.conf
install_service
echo 'RUN_ARGS="--server.port=8081 --server.context-path=/test"' > /test-service/spring-boot-app.conf
start_service
await_app http://127.0.0.1:8081/test/
curl -s http://127.0.0.1:8081/test/

@ -0,0 +1,10 @@
source ./test-functions.sh
mkdir ./pid
install_service
echo 'PID_FOLDER=./pid' > /test-service/spring-boot-app.conf
start_service
echo "PID: $(cat /test-service/pid/spring-boot-app/spring-boot-app.pid)"
await_app
curl -s http://127.0.0.1:8080/
status_service
stop_service

@ -1,6 +1,6 @@
source ./test-functions.sh
echo 'JAVA_OPTS=-Dserver.port=8081' > /spring-boot-app.conf
install_service
echo 'JAVA_OPTS=-Dserver.port=8081' > /test-service/spring-boot-app.conf
start_service
await_app http://127.0.0.1:8081/
curl -s http://127.0.0.1:8081/

@ -1,6 +1,6 @@
source ./test-functions.sh
echo 'RUN_ARGS=--server.port=8081' > /spring-boot-app.conf
install_service
echo 'RUN_ARGS=--server.port=8081' > /test-service/spring-boot-app.conf
start_service
await_app http://127.0.0.1:8081/
curl -s http://127.0.0.1:8081/

@ -1,7 +1,7 @@
source ./test-functions.sh
chmod -x $(type -p start-stop-daemon)
echo 'USE_START_STOP_DAEMON=false' > /spring-boot-app.conf
install_service
echo 'USE_START_STOP_DAEMON=false' > /test-service/spring-boot-app.conf
start_service
await_app
curl -s http://127.0.0.1:8080/

@ -1,7 +1,8 @@
install_service() {
mv /spring-boot-launch-script-tests-*.jar /spring-boot-app.jar
chmod +x /spring-boot-app.jar
ln -s /spring-boot-app.jar /etc/init.d/spring-boot-app
mkdir /test-service
mv /spring-boot-launch-script-tests-*.jar /test-service/spring-boot-app.jar
chmod +x /test-service/spring-boot-app.jar
ln -s /test-service/spring-boot-app.jar /etc/init.d/spring-boot-app
}
start_service() {

@ -145,7 +145,7 @@ start() {
do_start() {
working_dir=$(dirname "$jarfile")
pushd "$working_dir" > /dev/null
mkdir "$PID_FOLDER" &> /dev/null
mkdir -p "$PID_FOLDER" &> /dev/null
if [[ -n "$run_user" ]]; then
checkPermissions || return $?
if [[ -z "$pid_subfolder" ]]; then
@ -180,6 +180,8 @@ do_start() {
}
stop() {
working_dir=$(dirname "$jarfile")
pushd "$working_dir" > /dev/null
[[ -f $pid_file ]] || { echoYellow "Not running (pidfile not found)"; return 0; }
pid=$(cat "$pid_file")
isRunning "$pid" || { echoYellow "Not running (process ${pid}). Removing stale pid file."; rm -f "$pid_file"; return 0; }
@ -202,6 +204,8 @@ restart() {
}
force_reload() {
working_dir=$(dirname "$jarfile")
pushd "$working_dir" > /dev/null
[[ -f $pid_file ]] || { echoRed "Not running (pidfile not found)"; return 7; }
pid=$(cat "$pid_file")
rm -f "$pid_file"
@ -211,6 +215,8 @@ force_reload() {
}
status() {
working_dir=$(dirname "$jarfile")
pushd "$working_dir" > /dev/null
[[ -f "$pid_file" ]] || { echoRed "Not running"; return 3; }
pid=$(cat "$pid_file")
isRunning "$pid" || { echoRed "Not running (process ${pid} not found)"; return 1; }

Loading…
Cancel
Save