检查服务器上运行的服务,如果停止则重新启动它们?

检查服务器上运行的服务,如果停止则重新启动它们?

我正在尝试编写一个 python 脚本来显示我的服务器上运行的服务。

问题是 mongodb 在服务器上不断出现故障,每次发生这种情况时,我都必须手动编写命令来启动它。

我想做的是在某些服务出现故障时自动执行这项工作。

目前我已经写了这个https://gist.github.com/prodicus/67609dd984309d0a82f9

我知道这是非常基本的人。还有很长的路要走:)

现在我该如何启动服务蒙古数据库阿帕奇通过这个脚本?任何建议都会非常有帮助。

答案1

我正在尝试编写一个 python 脚本来显示我的服务器上运行的服务。

不要那样做。那是确切地流程经理喜欢什么upstartsystemd有什么用途。使用systemd,一个简单的 mongo 单元文件可能看起来像这样:

[Unit]
Description=High-performance, schema-free document-oriented database
After=syslog.target network.target

[Service]
Type=forking
User=mongodb
EnvironmentFile=/etc/sysconfig/mongod
PIDFile=${PIDFILE-/var/run/mongodb/mongod.pid}
ExecStart=/usr/bin/mongod $OPTIONS run
PrivateTmp=true
LimitNOFILE=64000
TimeoutStartSec=180

[Install]
WantedBy=multi-user.target

如果您希望在失败时自动重新启动,您可以添加到该[Service]部分:

Restart=on-failure

如果您不幸在没有现代流程管理器的系统上工作,您可以使用类似的工具导师以达到同样的效果。

但实际上,如果您的应用程序不断崩溃,您最好尝试找到问题的根源。 Mongodb 将信息记录到文件指向logpath的任何位置/etc/mongod.conf/var/log/mongodb/mongodb.log在我的系统上),这可能是查找问题的第一个地方。

其他应用程序提供类似的诊断信息,可以帮助找到崩溃的根本原因。

答案2

快速而肮脏的方式:

您可以在 cron 上放置一个脚本,使其每 X 分钟运行一次,如果 mongodb 未运行,则重新启动它。

下面这个简单脚本的主要内容是,它依赖于 grep 响应代码来确定是否应该重新启动。但是,您需要在那里使用第二个 grep,因为第一个 grep 将始终返回成功,因为 grep 命令本身出现在进程列表中。因此,如果您在 ps 的输出中说“Grep for THIS STRING”,那么 grep 首先总是会找到它,因为它总是会找到命令“Grep for THIS STRING”的进程。

当然,有更好、更漂亮的方法可以做到这一点,但下面的逻辑是有效的。归根结底,它可能很难看,但它确实有效。我借用了一个必须编写的简单脚本,以确保来自另一个大陆的极其缓慢的同步能够继续运行,即使网络非常差并且经常断开连接。

#!/bin/bash

# DATE var only included in case you want some rudimentary logging on when mongo drops/restarts. You will have to add that yourself.

DATE=`date +%m-%d-%H:%M:%S`

ps -ef | grep 'unique first part of unique string that you see from ps which indicates mongo is running' | grep 'second part of unique string that you see from ps when mongo is running'; 

if [ $? == "1" ]; 
    then 

command to restart mongodb; can also include other commands to make sure it runs correctly like removing stale locks etc; 

fi

答案3

它以 root 身份运行吗?在这种情况下,您可以service xxxx start在脚本中执行以下操作xxxx蒙古数据库或者阿帕奇

相关内容