PATH=$PATH:$JAVA_HOME/bin
NAME=$1
VERSION=$2
PORT=$3
echo $NAME
ID=`ps -ef | grep "$NAME" | grep -v "$0" | grep -v "grep" | awk '{print $2}'`
for id in $ID
do
kill -9 $id
echo "killed $id"
done
nohup java -server -Xms600m -Xmx600m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -Xverify:none -XX:+DisableExplicitGC
-Djava.awt.headless=true -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=$PORT,suspend=n -Duser.timezone=Asia/Shanghai
-Denv=fat -Dapollo.cluster=vmfat03 -jar $NAME-$VERSION.jar > $NAME.log 2>&1 &
脚本如图,很通用的一个,但是如果我启动时加上了远程端口的话,下次再运行脚本就会报错
ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]
远程端口被占用,可是我明显已经把这个进程kill掉了,使用命令查询也是已经杀掉。
经过猜想,会不会是kill掉进程之后远程连接端口关闭还需要一点时间才彻底关闭,但是这时候你又用同样的端口号去开启远程debug模式,这样就会出现上图错误,于是我就在脚本的done后面sleep 1。让他等待1s。
结果证明猜想没错,之后就没报这种错误了