Did you reload the monit configuration after the stat program modification?
If the "/etc/init.d/httpd restart" does restart the apache, but the pidfile is still not created, it's probably bug in the script. The fix can be to make sure that the pidfile is created by the apache start/restart script. Another option could be to use Monit's pattern based process check, which doesn't depend on the pidfile. On Sep 11, 2012, at 5:46 PM, Nick Upson <[email protected]> wrote: > and I get the original result with start program = "/etc/init.d/httpd > restart" > > [BST Sep 11 16:43:29] debug : monit: pidfile '/var/run/httpd.pid' does not > exist > [BST Sep 11 16:43:29] error : 'apache' process is not running > [BST Sep 11 16:43:29] info : 'apache' trying to restart > [BST Sep 11 16:43:29] debug : monit: pidfile '/var/run/httpd.pid' does not > exist > [BST Sep 11 16:43:29] debug : monit: pidfile '/var/run/httpd.pid' does not > exist > [BST Sep 11 16:43:29] info : 'apache' start: /etc/init.d/httpd > [BST Sep 11 16:43:29] debug : monit: pidfile '/var/run/httpd.pid' does not > exist > [BST Sep 11 16:43:29] debug : monit: pidfile '/var/run/httpd.pid' does not > exist > [BST Sep 11 16:44:19] error : 'apache' failed to start > > > Nick Upson > > > > On 11 September 2012 16:42, Nick Upson <[email protected]> wrote: > 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
-- To unsubscribe: https://lists.nongnu.org/mailman/listinfo/monit-general
