Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Docker在X个时间后杀死容器中的无限进程_Bash_Shell_Docker_Infinite Loop_Infinite - Fatal编程技术网

Bash Docker在X个时间后杀死容器中的无限进程

Bash Docker在X个时间后杀死容器中的无限进程,bash,shell,docker,infinite-loop,infinite,Bash,Shell,Docker,Infinite Loop,Infinite,我正在使用此docker中找到的代码基本上启动一个容器,并在20秒内运行一个进程,如果进程完成/未完成/未能执行/超时则容器将被终止 我目前使用的代码如下: #!/bin/bash set -e to=$1 shift cont=$(docker run -d "$@") code=$(timeout "$to" docker wait "$cont" || true) docker kill $cont &> /dev/null echo -n 'status: ' if [

我正在使用此docker中找到的代码基本上启动一个容器,并在20秒内运行一个进程,如果进程完成/未完成/未能执行/超时则容器将被终止

我目前使用的代码如下:

#!/bin/bash
set -e

to=$1
shift

cont=$(docker run -d "$@")
code=$(timeout "$to" docker wait "$cont" || true)
docker kill $cont &> /dev/null
echo -n 'status: '
if [ -z "$code" ]; then
    echo timeout
else
    echo exited: $code
fi

echo output:
# pipe to sed simply for pretty nice indentation
docker logs $cont | sed 's/^/\t/'

docker rm $cont &> /dev/null
但是,如果运行无限进程(例如,这个python无限循环),这几乎是完美的:


整个系统都堵塞了,应用程序崩溃了,在读了一点之后,我认为这与标准输出缓冲区有关,但我完全不知道这意味着什么?

请在结尾处添加& cont=$(docker运行-d“$@”)&

它将在后台运行该进程

我不知道dockers,但如果它仍然无法停止,您也可以在这一行之后添加以下内容:

mypid=$! 睡眠20&杀死$mypid


问候

请在 cont=$(docker运行-d“$@”)&

它将在后台运行该进程

我不知道dockers,但如果它仍然无法停止,您也可以在这一行之后添加以下内容:

mypid=$! 睡眠20&杀死$mypid


关于

您遇到的问题是进程正在向标准输出写入大量数据。 这些消息被记录到一个无限增长的文件中。 查看(取决于系统日志文件的位置):

如果不感兴趣,可以删除旧日志文件。 一种可能是启动
docker运行-d
守护进程 在ulimit限制下,文件的最大大小可以是。 添加到脚本的开头,例如:

ulimit -f 20000 -c 0
这将文件大小限制为20000*1024字节,并禁用您期望的核心文件转储
从写操作被迫失败的无限循环中获取数据。

您遇到的问题是进程正在向标准输出写入大量数据。 这些消息被记录到一个无限增长的文件中。 查看(取决于系统日志文件的位置):

如果不感兴趣,可以删除旧日志文件。 一种可能是启动
docker运行-d
守护进程 在ulimit限制下,文件的最大大小可以是。 添加到脚本的开头,例如:

ulimit -f 20000 -c 0
这将文件大小限制为20000*1024字节,并禁用您期望的核心文件转储
从写操作被迫失败的无限循环中获取。

作为后台进程运行会使情况变得更糟,而另一行不起作用,Docker是微型虚拟机,我假设答案将非常专业,但感谢您的尝试。对不起,是的,这是在后台运行进程的目的。否则,您将在启动下一条指令之前等待循环完成。我想按返回键,但我的键盘似乎工作不好。有两个命令:mypid=$;然后按return^^和sleep 20&&kill$mypid,它将杀死您的虚拟机。这可能是更干净的方式。我会检查我是否能找到这方面的任何文档,如果我发现后台进程的运行使情况变得更糟,而另一行不起作用,Docker是微型虚拟机,我假设答案将非常专业,但感谢您的尝试。对不起,是的,这是在后台运行进程的目的。否则,您将在启动下一条指令之前等待循环完成。我想按返回键,但我的键盘似乎工作不好。有两个命令:mypid=$;然后按return^^和sleep 20&&kill$mypid,它将杀死您的虚拟机。这可能是更干净的方式。我会检查我是否能找到这方面的任何文档,如果我找到了,我会发布一个更好的答案。嘿,我不知道在我的代码中添加上述代码的位置,有什么想法吗?在脚本中的
set-e
之后添加
ulimit
。您可能需要大幅增加限制,因为docker可能需要将大文件用于日志以外的其他内容。Cheers必须实际添加到docker VM中运行的脚本中,但它的工作方式与应有的一样!谢谢,嘿,我想不出在哪里把上面的代码添加到我的代码中,有什么想法吗?在脚本中的
set-e
之后添加
ulimit
。您可能需要大幅增加限制,因为docker可能需要将大文件用于日志以外的其他内容。Cheers必须实际添加到docker VM中运行的脚本中,但它的工作方式与应有的一样!非常感谢。
ulimit -f 20000 -c 0