我在一个打开jdk8的Ubuntu15.04容器中运行StarDoG4.0,运行良好。我想用陷阱来处理优雅地关闭了星狗。
为了在容器中执行stardog,使它继续运行,我一直在使用以下操作,它运行得很好
$SBIN/bin/stardog-admin server start && (tail -f /storage/stardog.log &) && while (pidof java > /dev/null); do sleep 1; done如果没有下面的内容,容器将运行几秒钟并停止
&& (tail -f /storage/stardog.log &) && while (pidof java > /dev/null); do sleep 1; done但是,这会导致容器中的多个PID
root 1 0.0 0.0 18384 3236 ? Ss 14:04 0:02 /bin/bash /stardog_binaries/startup.sh
root 45 0.1 4.9 4619052 406940 ? Sl 14:04 0:10 java -Xms2g -Xmx2g -XX:MaxDirectMemorySize=4g -XX:SoftRefLRUPolicyMSPerMB=1 -XX:+UseParallelOldGC -XX:+UseCompressedOops -Djavax.xml.datatype.DatatypeFactory=org.apache.xerc
root 97 0.0 0.0 4412 740 ? S 14:04 0:00 tail -f /storage/stardog.log
root 12108 0.2 0.0 18184 3100 ? Ss 15:44 0:00 bash
root 12122 0.0 0.0 4376 784 ? S 15:44 0:00 sleep 1当容器关闭时,下面的陷阱无法关闭stardog
trap 'kill -TERM $PID' TERM INT
$SBIN/bin/stardog-admin server start && (tail -f /storage/stardog.log &) && while (pidof java > /dev/null); do sleep 1; done
PID=$!
wait $PID
trap - TERM INT
wait $PID
EXIT_STATUS=$?因此,我的问题是如何正确地捕获$SBIN/bin/ stardog服务器启动,以便当容器关闭时,stardog优雅地退出。
向康德问好
发布于 2015-11-27 16:34:59
您可以使用专门制作的图像来处理此类问题,比如抛锚/基象-码头。
参见"PID 1僵尸收割问题":通过将脚本声明为守护进程,您将确保图像正确处理关机信号。
https://stackoverflow.com/questions/33960873
复制相似问题