我有一个Digital Ocean Droplet,我运行4个容器,每个容器都有一个小的python应用程序。
不时(一周或两周一次),所有容器都停止工作。它不是由内部的python应用程序引起的。
我做了一个systemd计时器,每30分钟执行一次bash脚本来检查容器是否正在运行,如果没有,则启动它们。 计时器工作了几天,它永远不必重新启动容器。
但是,有一天,我ssh到我的液滴,看到容器停止 - 和
systemctl list-timers --all
告诉我计时器从系统计时器中消失了!它已经不存在了!
容器检查脚本正在写日志,日志在容器停止的同时停止。
问题:
如何找出阻止我的容器的原因?
系统计时器怎么可能消失了?
如何解决此问题?
我是唯一一个可以砸到那个水滴的人,所以其他人也无法搞砸它。
答案 0 :(得分:2)
当新版本的操作系统可用时,CoreOS群集会自行重启。这意味着如果您手动在CoreOS机器上启动进程,某些时候它可能会消失。
好消息是,有一种标准方法可以在CoreOS上运行进程,这些进程将在机器运行时恢复 - 也就是说,您可以使用systemd单元。 CoreOS描述了哪些单元以及如何在这里使用它们:https://coreos.com/docs/launching-containers/launching/getting-started-with-systemd/
简而言之,您可以分三步创建自己的单位:
在/ etc / systemd / system中放置一个特殊格式的文件 - 最简单的可能是
[Unit]
Description=MyApp
After=docker.service
Requires=docker.service
[Service]
ExecStart=/usr/bin/docker run mycontainer
[Install]
WantedBy=multi-user.target
然后,您将要设置系统,以便它将使用
读取该文件(并运行您的容器)$ sudo systemctl enable foo.service
$ sudo systemctl start hello.service
链接中的文档有更多细节(我强烈建议您在开始之前先看一下它 - 它很简短!)