我的脚本有问题,当我想保存pid时,不正确的pid被保存给我。 我怀疑pid脚本(start.sh)是写给我的,而不是screen命令写的。
echo "Trwa uruchamianie bota muzycznego..."
if [ -e "$BINARYNAME" ]; then
if [ ! -x "$BINARYNAME" ]; then
echo "${BINARYNAME} is not executable, trying to set it"
chmod u+x "${BINARYNAME}"
fi
if [ -x "$BINARYNAME" ]; then
export LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBRARY_PATH}"
screen -dmS "${BASENAME}" mono "${BINARYNAME}" > /dev/null &
TEST=$0
PID=$!
echo "${PID}"
ps -p ${PID} > /dev/null 2>&1
if [ "$?" -ne "0" ]; then
echo "Bot muzyczy nie został uruchomiony."
else
echo $PID > TS3AudioBot.pid
echo "Bot muzyczny został uruchomiony."
fi
else
echo "${BINARNAME} nie jest możliwy do wykrycia, nie można uruchomić bota muzycznego."
fi
else
echo "Could not find binary, aborting"
exit 5
fi
答案 0 :(得分:0)
我相信您期望在$ PID中获得 screen 进程的pid。发生的情况是屏幕立即退出,并且$!是指消失的屏幕进程的pid,而不是运行 mono 命令(如果仍在运行)的分离进程的pid。
我在脚本中将“ screen -dmS $ {BASENAME}”单声道$ {BINARYNAME}> / dev / null&”替换为“ sleep 2000&”,并在其中保存了正确的$ PID,即睡眠过程的$ PID。变量并对其进行操作。由于上述原因,屏幕上不会发生这种情况。
您可能要考虑处理“ screen -list”的输出,以便获得分离过程的pid:
root@tutorial:/var/tmp# screen -dmS 'sleeper' sleep 2000
root@tutorial:/var/tmp# screen -list
There is a screen on:
7089.sleeper (07/02/2018 04:05:57 AM) (Detached)
1 Socket in /var/run/screen/S-root.
root@tutorial:/var/tmp# ps axlww | grep 7089
5 0 7089 1 20 0 25672 2396 poll_s Ss ? 0:00 SCREEN -dmS sleeper sleep 2000
4 0 7090 7089 20 0 5808 648 hrtime Ss+ pts/0 0:00 sleep 2000
0 0 7093 2607 20 0 12728 2192 pipe_w S+ ttyS1 0:00 grep 7089
您的脚本可以从此处获取轨枕的pid。