The problem appears to be that, according to the log monit does a 'restart' but then does a 'start' as well
Nick Upson On 11 September 2012 16:28, Martin Pala <[email protected]> wrote: > Yes, if the pidfile is removed and Monit is set to use the pidfile, then > it will try to restart the service as it's driven by the pidfile content > and check it every cycle. Because the pidfile is missing, the "restart" > action is reduced to plain "start" - if the apache start script doesn't > create the missing pidfile in this case, then Monit thinks that the service > is not running (as it has no key to the process' PID). > > => if the start of apache via Monit works (i.e. no environment problem), > but apache start script just doesn't recreate the pidfile, then you can > try replace the start action with restart to make sure that the apache > script will create the pidfile: > --8<-- > check process apache with pidfile /var/run/httpd.pid > start program = "/etc/init.d/httpd restart" > stop program = "/etc/init.d/httpd stop" > --8<-- > > Regards, > Martin > > > On Sep 11, 2012, at 5:15 PM, Nick Upson <[email protected]> wrote: > > The issue is not the environment, its the existance of the pid file (or > not). I can recreate the problem by taking a monit system that has already > started apache (proving its not the environment) and remove the pid file, I > then get the same output as shown below, repeated every cycle, with no exit > to the state. > > > Nick Upson > > > > On 11 September 2012 15:55, Martin Pala <[email protected]> wrote: > >> Hi, >> >> the debug message about the non-existing pidfilewithin the same second >> can be ignored - it's logged only in the debug mode by the method >> Util_isProcessRunning() (the debug messages repetition is fixed in newer >> Monit versions). When you filter out the debug messages, the event-action >> sequence is showed: >> >> [BST Sep 5 18:55:07] error : 'apache' process is not running >> [BST Sep 5 18:55:07] info : 'apache' trying to restart >> [BST Sep 5 18:55:07] info : 'apache' start: /etc/init.d/httpd >> [BST Sep 5 18:55:37] error : 'apache' failed to start >> >> => Monit detected that apache is not running at 18:55:07, it tried to >> restart it, but apache didn't start within 30 seconds. >> >> The reason why apache didn't start via Monit is most probably its >> dependence on some environment variable. Monit purges the environment for >> security reasons when executing the program, so you get >> only: PATH=/bin:/usr/bin:/sbin:/usr/sbin + MONIT_ variables. Sometimes >> linux distributions use special file (such as /etc/apache2/envvars on >> Debian) where you can set environment variables which are required for >> Apache. >> >> You can wrap the start program in shell - it'll load the environment you >> need: >> >> --8<-- >> start program = "/bin/bash -c '/etc/init.d/httpd start'" >> --8<-- >> >> Regards, >> Martin >> >> >> >> On Sep 10, 2012, at 2:51 PM, Nick Upson <[email protected]> wrote: >> >> I think that my theory may hold water, from /etc/init.d/httpd >> >> # When stopping httpd a delay of >10 second is required before SIGKILLing >> the >> # httpd parent; this gives enough time for the httpd parent to SIGKILL any >> # errant children. >> stop() { >> echo -n $"Stopping $prog: " >> killproc -p ${pidfile} -d 10 $httpd >> RETVAL=$? >> echo >> [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} >> } >> >> Nick Upson >> >> >> >> On 10 September 2012 12:56, Nick Upson <[email protected]> wrote: >> >>> I've just found a server where monit has been attempting to restart >>> httpd for several days. >>> >>> the monit config entry is: >>> >>> check process apache with pidfile /var/run/httpd.pid >>> start program = "/etc/init.d/httpd start" >>> stop program = "/etc/init.d/httpd stop" >>> >>> output in the monit.log is: >>> >>> [BST Sep 5 18:55:07] debug : monit: pidfile '/var/run/httpd.pid' >>> does not exist >>> [BST Sep 5 18:55:07] error : 'apache' process is not running >>> [BST Sep 5 18:55:07] info : 'apache' trying to restart >>> [BST Sep 5 18:55:07] debug : monit: pidfile '/var/run/httpd.pid' >>> does not exist >>> [BST Sep 5 18:55:07] debug : monit: pidfile '/var/run/httpd.pid' >>> does not exist >>> [BST Sep 5 18:55:07] info : 'apache' start: /etc/init.d/httpd >>> [BST Sep 5 18:55:07] debug : monit: pidfile '/var/run/httpd.pid' >>> does not exist >>> [BST Sep 5 18:55:07] debug : monit: pidfile '/var/run/httpd.pid' >>> does not exist >>> [BST Sep 5 18:55:37] error : 'apache' failed to start >>> >>> I think what is happening is that the restart and the start execution >>> are over-lapping such that the removal of the pid file >>> by the restart happens after the separate start. Why a restart is being >>> attempted I do not understand. >>> >>> This was corrected on the server by doing a manual kill of the httpd >>> processes >>> >>> >>> and, BTW, reporting that the pid file does not exist as part of starting >>> a process is, at best, redundant >>> and at worse, confusing >>> >>> >>> >>> Nick Upson >>> >>> >> -- >> To unsubscribe: >> https://lists.nongnu.org/mailman/listinfo/monit-general >> >> >> >> -- >> To unsubscribe: >> https://lists.nongnu.org/mailman/listinfo/monit-general >> > > -- > To unsubscribe: > https://lists.nongnu.org/mailman/listinfo/monit-general > > > > -- > To unsubscribe: > https://lists.nongnu.org/mailman/listinfo/monit-general >
-- To unsubscribe: https://lists.nongnu.org/mailman/listinfo/monit-general
