我正在尝试编写一个 python 脚本来显示我的服务器上运行的服务。
问题是 mongodb 在服务器上不断出现故障,每次发生这种情况时,我都必须手动编写命令来启动它。
我想做的是在某些服务出现故障时自动执行这项工作。
目前我已经写了这个https://gist.github.com/prodicus/67609dd984309d0a82f9
我知道这是非常基本的人。还有很长的路要走:)
现在我该如何启动服务蒙古数据库和阿帕奇通过这个脚本?任何建议都会非常有帮助。
答案1
我正在尝试编写一个 python 脚本来显示我的服务器上运行的服务。
不要那样做。那是确切地流程经理喜欢什么upstart
或systemd
有什么用途。使用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
:蒙古数据库或者阿帕奇。