top-bettercode / docker-qq

提供一种在linux下运行QQ的方式
https://hub.docker.com/r/bestwu/qq/
Apache License 2.0
403 stars 52 forks source link

关于entrypoint.sh的一些疑问 #54

Closed GKxxQAQ closed 1 year ago

GKxxQAQ commented 1 year ago

entrypoint.sh最后写的这段

while test -n "`pidof QQProtect.exe`"
do
  sleep 60
done
echo "退出"

我猜是不是想在进程QQProtect.exe结束的时候自动退出呢?但其实我没太明白为什么选择QQProtect.exe而不是QQExternal.exe,因为我们在TIM上点“退出”之后实际上是关闭了进程QQExternal.exe(我已按照issue 46的回答自己升级了TIM,不确定是不是升级导致这一行为发生了变化?)。


update: 再次尝试发现确实旧版本的TIM用的是QQProtect.exe


而更奇怪的是在entrypoint.sh里中间会原地运行一个run.sh进程,而它似乎没有在我退出TIM时自动结束,导致后面的sleep 300以及上面那段检测pidof QQProtect.exe的循环根本没有执行,所以每次都得手动docker stop才能把它关掉...

现在我简单改了一下之后可以了,我的entrypoint.sh

#!/bin/bash

groupmod -o -g $AUDIO_GID audio
groupmod -o -g $VIDEO_GID video

if [ $GID != $(echo `id -g qq`) ]; then
    groupmod -o -g $GID qq
fi
if [ $UID != $(echo `id -u qq`) ]; then
    usermod -o -u $UID qq
fi
chown qq:qq /TencentFiles

su qq <<EOF
   echo "启动 $APP"
   mkdir -p /home/qq/.deepinwine
   touch /home/qq/.deepinwine/.QQ_run
   ./observer.sh > /home/qq/observer_output.txt &
   "/opt/deepinwine/apps/Deepin-$APP/run.sh"
   echo "run.sh has been killed."
EOF

echo "exit"

observer.sh

#!/bin/bash

echo "observer starts."

while ! test -n "`pidof QQExternal.exe`"
do
    sleep 1
done

echo "QQExternal.exe has started."

while test -n "`pidof QQExternal.exe`"
do
    sleep 1
done

echo "QQExternal.exe has stopped."

pkill run.sh

if test -n "pidof run.sh"
then
    echo "killing run.sh failed."
else
    echo "run.sh is killed."
fi