0

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!

JTM
  • 1
  • 2
  • In general it is not a good idea to have `sudo` inside a scripts. Run the script itself with `sudo` instead. Also, try to change the line `sudo bash /opt/previewservice/preview-service.sh start` to `sudo /opt/previewservice/preview-service.sh start`. You are running bash with `sudo` instead of the script. – Ardit Jan 05 '18 at 10:32
  • I changed that sudo bash to sudo but no luck with that either. – JTM Jan 07 '18 at 05:51
  • why do you use `#!/bin/sh` and not `#!/bin/bash` in the script `testi.sh`. These interpreters may happen to be different depending on the distribution you use. – Ardit Jan 09 '18 at 12:40
  • I have tested like 100 and 1 different scripts and adjusted them a bit and tested. I'm not "true" Linux admin (at least not yet) and I have mostly worked with Ubuntu but nowadays CentOS is our primary OS. Can that affect so I can run them with user spark but when Monit runs script it can not? (Monit daemon is started as spark too). – JTM Jan 09 '18 at 12:50

1 Answers1

0

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
TheCodeKiller
  • 1,733
  • 2
  • 12
  • 18
  • I was taken to another task and was not able to check this further more. Although, Monit was not running as root and I changed it to use root. Will edit this when I get back to that a bit later. – JTM Feb 01 '18 at 12:10