diff --git a/src/support/GDaemon.cpp b/src/support/GDaemon.cpp index c3c9eb6..016e956 100644 --- a/src/support/GDaemon.cpp +++ b/src/support/GDaemon.cpp @@ -47,6 +47,7 @@ /* __ Macros _____________________________________________________________ */ /* __ Coding definitions _________________________________________________ */ +#define G_APPEND_LOG //!< Append output to log file /* __ Debug definitions __________________________________________________ */ @@ -175,7 +176,11 @@ GDaemon* GDaemon::clone(void) const void GDaemon::start(void) { // Open logger + #if defined(G_APPEND_LOG) + m_log.open(gammalib::gamma_filename("daemon.log"), false); + #else m_log.open(gammalib::gamma_filename("daemon.log"), true); + #endif m_log.chatter((GChatter)m_chatter); m_log.date(true); @@ -193,6 +198,16 @@ void GDaemon::start(void) // Main event handling loop while (true) { + // If another daemon is running then exit this daemon + pid_t pid = lock_pid(); + if (pid != m_pid) { + m_log << "*** Another daemon with PID " << pid; + m_log << " is running, while this daemon has PID " << m_pid; + m_log << ". Exit this daemon."; + m_log << std::endl; + break; + } + // Put all activities into try-catch block try { @@ -201,7 +216,8 @@ void GDaemon::start(void) } catch (const std::exception &except) { - m_log << "*** Exception catched by daemon:" << std::endl; + m_log << "*** Exception catched by daemon with PID " << m_pid; + m_log << ":" << std::endl; m_log << except.what() << std::endl; } @@ -214,7 +230,8 @@ void GDaemon::start(void) } // endwhile: main event loop // Log termination of event loop - m_log << "Terminated event loop for unknown reason." << std::endl; + m_log << "Terminated event loop for daemon with PID " << m_pid; + m_log << "." << std::endl; // Delete lock file delete_lock_file(); @@ -400,7 +417,7 @@ void GDaemon::delete_lock_file(void) std::remove(lockfile.url().c_str()); // Log removal of lock file - m_log << "Removal of lock file \"" << lockfile.url(); + m_log << "Removed lock file \"" << lockfile.url(); m_log << "\" for PID " << (int)(m_pid) << std::endl; }