- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经从 docker 镜像创建了 gcloud
计算实例并将其配置为启动 shutdown script它应该调用 docker stop
以正常关闭容器中的应用程序。
gcloud beta compute instances create-with-container mycontainername \
--container-image ypapax/trap_exit \
--metadata-from-file shutdown-script=./on_shutdown.sh
这是我的初始 on_shutdown.sh:
#!/usr/bin/env bash
docker stop $(docker ps -a -q)
不过,我向其中添加了更多调试行,现在 on_shutdown.sh
看起来像:
#!/usr/bin/env bash
# https://cloud.google.com/compute/docs/shutdownscript
curl -X POST -d "$(date) running containers on $(hostname): $(docker ps)" http://trap_exit.requestcatcher.com/test
docker stop $(docker ps -a -q)
result=$?
curl -X POST -d "$(date) $(hostname) stop status code: $result" http://trap_exit.requestcatcher.com/test
当我重启谷歌计算实例时:
sudo reboot
启动脚本 on_shutdown.sh
(我看到它正在检查 requrest listener)。但是当它试图停止 docker 容器时,还没有什么可以停止,docker ps
显示空行。
所以这一行:
curl -X POST -d "$(date) running containers on $(hostname): $(docker ps)" http://trap_exit.requestcatcher.com/test
给我
Thu Jul 12 04:29:48 UTC 2018 running containers on myinstance:
在调用 sudo reboot
之前,我检查了 docker ps
并看到我的容器正在运行:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bbaba30e65ff ypapax/trap_exit "/entrypoint.sh" 7 seconds ago Up 7 seconds myinstance
所以看起来 docker 容器在调用 reboot
和启动 on_shutdown.sh
之间被杀死了。问题是 killing 不会在我的 entrypoint 中调用 trap cleanup EXIT
.需要停止它才能调用清理。这是我的切入点:
#!/usr/bin/env bash
set -ex
cleanup(){
echo cleanup is called
curl -X POST -d "cleanup is called on $(hostname) $(date)" http://trap_exit.requestcatcher.com/test
}
trap cleanup EXIT
curl -X POST -d "container is started on $(hostname) $(date)" http://trap_exit.requestcatcher.com/test
sleep 10000
所以我想在 gcloud 计算实例重启或关闭时运行我的容器清理,但是标志 --metadata-from-file shutdown-script=./on_shutdown.sh
没有帮助它。我还尝试了其他方法在重新启动时调用脚本,例如 this .但是我的脚本根本没有启动。
这是我的 Dockerfile如果有帮助的话。
最佳答案
首先,有limitations coming with this approach :
- Create and run shutdown scripts that execute commands right before an instance is terminated or restarted, on a best-effort basis.
- Shutdown scripts are especially useful for instances in a managed instance group with an autoscaler.
- The script runs during the limited shutdown period before the instance stops
如您所见,docker 可能在关闭脚本运行时已经停止:使用 docker ps -a
(而不是 docker ps)检查所有退出容器的状态。尝试 adding a supervisor (如 in this example )一个 docker 镜像本身,以便查看主管是否或至少 use the docker run --init
option :目标是检查容器本身是否确实使用了它们的主管脚本。
关于linux - 使用 gcloud metadata-from-file shutdown-script 优雅地停止 docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51298734/
假设我的 Linux 系统中运行着 20 个进程/deqamons,与 SHUTDOWN 相比,HALT 对我的进程/守护进程的影响有何不同 最佳答案 通常,人们使用 shutdown command
我无法理解差异。帮我看看这个区别。而ProcessPoolExecutor呢,他的行为是一样的吗? def func(task): do_something(task) tasks = [ta
在某个时候,在代码推送后不久,我们看到我们的 Web 应用程序多次重启,但没有任何日志记录表明存在任何问题。所以我找到了这篇文章:http://weblogs.asp.net/scottgu/4331
这个问题已经有答案了: Difference between shutdown and shutdownNow of Executor Service (3 个回答) 已关闭 4 年前。 以下是Exe
这个问题在这里已经有了答案: close vs shutdown socket? (9 个回答) 关闭 5 年前。 在此 MSDN 页面上: Sending and Receiving Data o
我想知道使用elasticsearch shutdown API和终止elasticsearch进程(ctrl + c)之间的区别。我实际上不以正常关闭为答案,因为我想知道发出关闭API调用时ES实际
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
Java 定时器调度任务:servive JVM 关闭? Timer timer = new Timer(); timer.scheduleAtFixedRate(...) JVM关闭后,调度的任务还
这个问题已经有答案了: Difference between shutdown and shutdownNow of Executor Service (3 个回答) 已关闭 5 年前。 我正在检查j
我正在 Windows 10 上的 CPython 3.7 中实现一个 Server 类,其中使用永久启动服务的 Server.serve 方法和 Server.shutdown code> 停止服务
为了避免延长等待时间,建议您在调用 awaitTermination() 之前先调用 shutdown(),因为后者不适合杀死执行者。但是,为了等待任务完成,您是否应该使用 invokeAll() 来
我正在用 Python 为老式计算机系统编写一个模拟器,在摆脱停止状态后尝试“重新启动”模拟器核心线程时,我遇到了一些抛出异常的问题。 “运行处理器”方法是一个更大类的一部分,如下所示: def ru
我有以下代码,用于在端口 8000 上运行本地 HTTP 服务器: # Omitted imports and irrelevant things for brevity. class Threade
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util
我制作了一个程序,它会在设定的时间后关闭 PC。用户使用 2 个旋转框(一个用于小时,另一个用于分钟)输入时间,然后我将它转换为毫秒: ms = (ui->hBox->text().toInt() *
class System { public: virtual ~System() final { Shutdown(); }; virtual void Shu
看下面的代码: public void pinger() { ScheduledThreadPoolExecutor executor = new Schedule
我开发了一个小型 Java 应用程序,在其中使用 Quartz.jar 库。 但是当执行我的应用程序并调用 Quartz 时,我在控制台中收到以下错误消息: org.quartz.SchedulerE
我有 parking 系统的代码。当空格数超过 20 时,它会发送错误消息,因为 20 是空格的限制。我想在此之后尝试关闭程序。 我已尝试做您可以在 Python 中做的事情。这是: import s
我们在 RHEL (jdk 1.7.. 51) 上使用 Neo4j2.0.1 - 我们在一个同步线程上调用 GraphDatabaseService.shutDown(),并且此方法永远不会返回或引发
我是一名优秀的程序员,十分优秀!