[FLINK-6300] Use 'exec' in start-foreground calls To avoid signal-handling issues in Docker, applications need to run as a single executable or use a process manager that forwards signals correctly, in either case running as PID 1.
Since Flink uses a number of chained scripts before the ultimate call to `java`, we need to use `exec` so that the script executable is replaced, ultimately resulting in a single `java` process as PID 1. There's no need to run a process manager since Flink only actually requires a single process. This closes #3734 Project: http://git-wip-us.apache.org/repos/asf/flink/repo Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/9d3f127e Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/9d3f127e Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/9d3f127e Branch: refs/heads/master Commit: 9d3f127e4f0ddd15ae7af393e0c5b0d3dd81d812 Parents: 2247502 Author: Patrick Lucas <m...@patricklucas.com> Authored: Tue Apr 18 14:48:49 2017 +0200 Committer: Greg Hogan <c...@greghogan.com> Committed: Tue Apr 18 09:58:26 2017 -0400 ---------------------------------------------------------------------- flink-dist/src/main/flink-bin/bin/flink-console.sh | 2 +- flink-dist/src/main/flink-bin/bin/jobmanager.sh | 2 +- flink-dist/src/main/flink-bin/bin/taskmanager.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flink/blob/9d3f127e/flink-dist/src/main/flink-bin/bin/flink-console.sh ---------------------------------------------------------------------- diff --git a/flink-dist/src/main/flink-bin/bin/flink-console.sh b/flink-dist/src/main/flink-bin/bin/flink-console.sh index 71c5c35..e60b101 100644 --- a/flink-dist/src/main/flink-bin/bin/flink-console.sh +++ b/flink-dist/src/main/flink-bin/bin/flink-console.sh @@ -62,4 +62,4 @@ if [[ ${JAVA_VERSION} =~ ${IS_NUMBER} ]]; then fi echo "Starting $SERVICE as a console application on host $HOSTNAME." -$JAVA_RUN $JVM_ARGS ${FLINK_ENV_JAVA_OPTS} "${log_setting[@]}" -classpath "`manglePathList "$FLINK_TM_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS"`" ${CLASS_TO_RUN} "${ARGS[@]}" +exec $JAVA_RUN $JVM_ARGS ${FLINK_ENV_JAVA_OPTS} "${log_setting[@]}" -classpath "`manglePathList "$FLINK_TM_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS"`" ${CLASS_TO_RUN} "${ARGS[@]}" http://git-wip-us.apache.org/repos/asf/flink/blob/9d3f127e/flink-dist/src/main/flink-bin/bin/jobmanager.sh ---------------------------------------------------------------------- diff --git a/flink-dist/src/main/flink-bin/bin/jobmanager.sh b/flink-dist/src/main/flink-bin/bin/jobmanager.sh index 5c3ac71..f88b165 100755 --- a/flink-dist/src/main/flink-bin/bin/jobmanager.sh +++ b/flink-dist/src/main/flink-bin/bin/jobmanager.sh @@ -76,7 +76,7 @@ if [[ $STARTSTOP == "start" ]] || [[ $STARTSTOP == "start-foreground" ]]; then fi if [[ $STARTSTOP == "start-foreground" ]]; then - "${FLINK_BIN_DIR}"/flink-console.sh jobmanager "${args[@]}" + exec "${FLINK_BIN_DIR}"/flink-console.sh jobmanager "${args[@]}" else "${FLINK_BIN_DIR}"/flink-daemon.sh $STARTSTOP jobmanager "${args[@]}" fi http://git-wip-us.apache.org/repos/asf/flink/blob/9d3f127e/flink-dist/src/main/flink-bin/bin/taskmanager.sh ---------------------------------------------------------------------- diff --git a/flink-dist/src/main/flink-bin/bin/taskmanager.sh b/flink-dist/src/main/flink-bin/bin/taskmanager.sh index d4e9838..3bac51f 100755 --- a/flink-dist/src/main/flink-bin/bin/taskmanager.sh +++ b/flink-dist/src/main/flink-bin/bin/taskmanager.sh @@ -102,7 +102,7 @@ if [[ $STARTSTOP == "start" ]] || [[ $STARTSTOP == "start-foreground" ]]; then fi if [[ $STARTSTOP == "start-foreground" ]]; then - "${FLINK_BIN_DIR}"/flink-console.sh taskmanager "${args[@]}" + exec "${FLINK_BIN_DIR}"/flink-console.sh taskmanager "${args[@]}" else TM_COMMAND="${FLINK_BIN_DIR}/flink-daemon.sh $STARTSTOP taskmanager ${args[@]}"