在执行时间未结束时从命令跳转

时间:2016-10-30 06:41:09

标签: bash docker

我的脚本如下" docker run"启动后它将根据docker文件打开tty执行命令,它需要大约5-6个小时来报告执行结束符号,但同时我需要让它完成工作并在shell脚本中继续前进线条并获得一些pid并使其成为条件。 我的问题不在于我无法执行" docker run"然后从它移动到其他脚本行。 如果不影响" docker run"我怎么能这样做呢?命令。

    docker run --name=something -it --rm \
      --link=postgresql:postgresql \  
      --publish=80:80 \
      --env='something_PORT=80' \
      --env='NGINX_MAX_UPLOAD_SIZE=60m' \
      --volume=/srv/docker/something:/home/something/data \
      --volume=/srv/docker/something/rgloader:/home/something/rgloader \
      something:3.3 \
      app:backup:restore

#30 sec pass till process starts to unpack tar file.
    sleep 30

#Get PID of tar extraction process
    PID=`ps au | grep "tar -xf" | head -n 1 | awk '{print $2}'`
echo $PID

echo "tar file extraction is completed"

#wait until tar extraction process ends

while [ -e /proc/$PID ]
do
    echo $PID PID still running
    sleep 10
done

1 个答案:

答案 0 :(得分:0)

  

我知道如果我使用“-d”我可以在守护进程模式下运行docker,但我只想运行docker并让它完成它的工作并转到下一行,

然后最简单的方法是在后台启动docker

docker run ... &
              ^^^

请注意,您的脚本的其余部分不会直接从主机看到Docker容器(如tar)启动的进程。
请参阅“Finding Docker container processes? from host point of view” 您必须使用docker top