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
