如何监视服务并在 Linux 中停止时重新启动

夏期劇*_*期劇場 27 linux services reboot daemon

实际上,我不太确定是否应该使用 Shell 脚本,或者是否已经有一些方法。但是无论我们使用什么方法,我都希望服务一直运行。

比方说,iptables作为一个例子。然后 ..

  • 每当iptables服务stopped或(换句话说)没有运行,我希望它是started(或restarted)..自动无论何时停止(或不运行)。
  • 换句话说,我想让服务一直保持正常运行。

(也许我可以给出一个公平的频率来检查,如果进行实时检查是问题。所以可以说,每 5 分钟一次)

我能想到的唯一方法是在 Cron Tab 中使用 Shell 脚本。

  • 请问有什么聪明的解决办法吗?

谢谢!

Ale*_*bes 28

2018 年 3 月更新

这个答案现在已经很老了,自从它被编写以来,systemd 在 Linux 上赢得了 pid1 战争。因此,您可能应该创建一个systemd单元,如果 systemd 内置在您的发行版中(大多数都是)。

下面的答案为后人保留。


上面的 monit 答案是有效的,但我想我会提到一些替代方案:

值得记住的是,您的操作系统已经解决了进程管理问题。传统上,Linux 使用 sysvinit,它基本上是您在 init.d 中看到的脚本的集合。然而,它非常愚蠢,不能监控进程,init.d 脚本很复杂,它被替换是有充分理由的。

更现代的操作系统开始取代 sysvinit,领跑者是 Upstart 和 Systemd。Debian 倾向于 systemd,Ubuntu 已经开发并且几乎已经过渡到 Upstart,并且像 Debian Redhat/CentOS/Fedora 一样正在转向 systemd。因此,如果您使用的操作系统已经取代了 sysvinit,我建议您使用内置的操作系统。脚本比初始化脚本更容易编写。

我使用过 runit 并且非常喜欢它,但最容易使用的是 supervisor。它也有很好的文档记录,几乎可以在任何地方使用,并且打包在所有主要发行版中。

但无论你做什么,拜托,拜托,请不要使用shell脚本。这种方法有很多问题!

  • 如何使用 sysvinit 做到这一点? (2认同)

Law*_*ceC 13

iptables是一个糟糕的例子,因为它实际上并不是正在运行的服务或守护程序,而是内核的一部分。你不能真正“停止” iptables,你只能给它一个配置,“停止”它涉及给它一个空白的配置。事实上,我的 Linux 系统崩溃了,但使用的端口转发设置iptables继续工作。

无论如何,一个名为的实用程序monit将执行您想要的操作。如果您使用的是 Debian,那它就apt-get install monit离您很远了。学习有点复杂,但非常灵活。