简体   繁体   English

Monit脚本无法重新启动服务

[英]Monit script not working to restart service

This is my first post so please be patient with me! 这是我的第一篇文章,所以请耐心等待!

I have tried to create script that checks if service is unreachable (http error code), then Monit should restart program (Preview Service). 我试图创建脚本来检查服务是否无法访问(http错误代码),然后Monit应该重新启动程序(预览服务)。 Monit is run as user "spark". Monit以“ spark”用户身份运行。

This is phantomjs-check.sh code: 这是phantomjs-check.sh代码:

#!/bin/bash
# source: /opt/monit/bin/phantomjs-check.sh

url="localhost:9001/preview/phantomjs"

response=$(curl -sL -w "%{http_code}\\n" $url | grep 200)

if [ "$response" = "}200" ]
then
        echo "-= Toimii!!!! =-"
        exit 1
else
        echo "-= RiKKi!!!! =-"
        exit 0
fi
[root@s-preview-1 bin]#

If I manually kill previewservice and run that script I get exit code of 0 which is how that should work. 如果我手动终止Previewservice并运行该脚本,则会得到退出代码0,这应该是这样的。

In Monit I have following conf: 在Monit中,我有以下conf:

check program phantomjs with path "/opt/monit/bin/phantomjs-check.sh"
if status = 0 then exec "/opt/monit/bin/testi.sh"

Currently I added some logging to it and this is test.sh code: 目前,我向其中添加了一些日志记录,这是test.sh代码:

#!/bin/sh
# source: /opt/monit/bin/testi.sh

############# Added this for loggin purposes ############
#########################################################

dt=$(date '+%d/%m/%Y %H:%M:%S');
echo Testi.sh run at $dt >> /tmp/testi.txt

# Original part of the script
sudo bash /opt/previewservice/preview-service.sh start

In /etc/sudoers file I have line: 在/ etc / sudoers文件中,我有一行:

spark ALL=(ALL) NOPASSWD: /opt/previewservice/preview-service.sh

This command works from cli and it starts/restarts previewservice. 该命令从cli开始工作,并启动/重新启动Previewservice。 I can run "testi.sh" script manually as spark [spark@s-preview-1 bin]$ ./testi.sh and it works as intended, but even Monit gets info that service is down it doesn't start. 我可以手动运行“ testi.sh”脚本作为spark [spark@s-preview-1 bin]$ ./testi.sh ,它可以按预期工作,但是即使[spark@s-preview-1 bin]$ ./testi.sh也会得到该服务已关闭的信息,它也不会启动。

$ cat /tmp/testi.txt
    Testi.sh run at 05/01/2018 10:30:04
    Testi.sh run at 05/01/2018 10:31:04
    Testi.sh run at 05/01/2018 10:31:26

$ cat /tmp/previews.txt (This line was created by preview-service.sh start script so it has been run. $ cat /tmp/previews.txt (此行是由preview-service.sh启动脚本创建的,因此已运行。

File created 05/01/2018 09:26:44
********************************
Preview-service.sh run at 05/01/2018 10:31:26

tail -f -n 1000 /opt/monit/logfile shows following tail -f -n 1000 /opt/monit/logfile显示以下内容

[EET Jan  5 10:29:04] error    : 'phantomjs' '/opt/monit/bin/phantomjs-check.sh' failed with exit status (0) -- -= RiKKi!!!! =-
[EET Jan  5 10:29:04] info     : 'phantomjs' exec: /opt/monit/bin/testi.sh
[EET Jan  5 10:30:04] error    : 'phantomjs' '/opt/monit/bin/phantomjs-check.sh' failed with exit status (0) -- -= RiKKi!!!! =-
[EET Jan  5 10:30:04] info     : 'phantomjs' exec: /opt/monit/bin/testi.sh
[EET Jan  5 10:31:04] error    : 'phantomjs' '/opt/monit/bin/phantomjs-check.sh' failed with exit status (0) -- -= RiKKi!!!! =-
[EET Jan  5 10:31:04] info     : 'phantomjs' exec: /opt/monit/bin/testi.sh
[EET Jan  5 10:32:04] error    : 'phantomjs' '/opt/monit/bin/phantomjs-check.sh' failed with exit status (0) -- -= RiKKi!!!! =-
[EET Jan  5 10:32:04] info     : 'phantomjs' exec: /opt/monit/bin/testi.sh
[EET Jan  5 10:33:04] info     : 'phantomjs' status succeeded

And the last status succeeded comes when I run that testi.sh script as spark without sudoing. 最后一个成功的状态是当我不打扰地将testi.sh脚本作为spark运行时。

Any tips what I should try next? 有什么提示我接下来应该尝试什么? I appreciate all the help I can get! 我感谢我能获得的所有帮助!

Monit is usually running at root user. Monit通常以root用户身份运行。 Is it your case ? 是你的情况吗? If yes, you probably don't need the sudo part. 如果是,则可能不需要sudo部分。

After regarding you script working outside of Monit but not from Monit, Monit is having its own PATH environment variable which is very small. 考虑到脚本在Monit之外而不是在Monit之外工作之后,Monit具有自己的PATH环境变量,该变量非常小。 It is recommended to write full path to your script/binairies as: 建议将脚本/ binairies的完整路径写为:

/usr/bin/sudo /bin/bash /opt/previewservice/preview-service.sh start

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM