简体   繁体   中英

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). Monit is run as user "spark".

This is phantomjs-check.sh code:

#!/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.

In Monit I have following 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:

#!/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:

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

This command works from cli and it starts/restarts 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.

$ 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.

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

[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.

Any tips what I should try next? I appreciate all the help I can get!

Monit is usually running at root user. Is it your case ? If yes, you probably don't need the sudo part.

After regarding you script working outside of Monit but not from Monit, Monit is having its own PATH environment variable which is very small. It is recommended to write full path to your script/binairies as:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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