summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2004-07-21 20:59:33 (UTC)
committer Michael Krelin <hacker@klever.net>2004-07-21 20:59:33 (UTC)
commit4b2d32eca61f62bfd1370fd64254514152ecd23c (patch) (side-by-side diff)
treeab7d32f4b1572a33d1384d3127495feaea3978b4
parent5e437102c59f4544e3803598eabcb643d403272d (diff)
downloaddudki-4b2d32eca61f62bfd1370fd64254514152ecd23c.zip
dudki-4b2d32eca61f62bfd1370fd64254514152ecd23c.tar.gz
dudki-4b2d32eca61f62bfd1370fd64254514152ecd23c.tar.bz2
more civilized restart, bumped up version.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--NEWS3
-rw-r--r--configure.ac2
-rw-r--r--src/dudki.cc5
3 files changed, 8 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index efd0c31..b6a3774 100644
--- a/NEWS
+++ b/NEWS
@@ -1,2 +1,5 @@
+0.1
+ - initgroups() before executing RestartCommand.
+ - more civilized restart.
0.0
- Initial release.
diff --git a/configure.ac b/configure.ac
index 8a2a10b..8521a34 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,13 +1,13 @@
-AC_INIT([dudki], [0.0], [dudki-bugs@klever.net])
+AC_INIT([dudki], [0.1], [dudki-bugs@klever.net])
AC_CONFIG_SRCDIR([src/dudki.cc])
AC_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE([dist-bzip2])
AC_PROG_CXX
AC_PROG_CC
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS([syslog.h unistd.h getopt.h])
AC_HEADER_STDBOOL
AC_C_CONST
diff --git a/src/dudki.cc b/src/dudki.cc
index b769109..b4e95a7 100644
--- a/src/dudki.cc
+++ b/src/dudki.cc
@@ -12,33 +12,34 @@ using namespace std;
#ifdef HAVE_GETOPT_H
# include <getopt.h>
#endif
#ifndef DEFAULT_CONF_FILE
# define DEFAULT_CONF_FILE "/etc/dudki.conf"
#endif
#define PHEADER PACKAGE " Version " VERSION
#define PCOPY "Copyright (c) 2004 Klever Group"
bool finishing = false;
+bool restarting = false;
static char **_argv = NULL;
static void lethal_signal_handler(int signum) {
syslog(LOG_NOTICE,"Lethal signal received. Terminating.");
finishing = true;
}
static void sighup_handler(int signum) {
syslog(LOG_NOTICE,"SUGHUP received, reloading.");
- execvp(_argv[0],_argv);
+ restarting = finishing = true;
}
void check_herd(configuration& config) {
for(processes_t::iterator i=config.processes.begin();i!=config.processes.end();++i)
i->second.check(i->first,config);
}
void signal_self(const configuration& config,int signum) {
ifstream pids(config.pidfile.c_str(),ios::in);
if(!pids)
throw runtime_error("Can't detect running instance");
pid_t pid = 0;
@@ -228,22 +229,24 @@ int main(int argc,char **argv) {
signal(SIGABRT,lethal_signal_handler);
signal(SIGTERM,lethal_signal_handler);
signal(SIGHUP,sighup_handler);
sigset_t sset;
sigemptyset(&sset);
sigaddset(&sset,SIGINT); sigaddset(&sset,SIGABRT);
sigaddset(&sset,SIGTERM); sigaddset(&sset,SIGHUP);
sigprocmask(SIG_UNBLOCK,&sset,NULL);
while(!finishing) {
check_herd(config);
sleep(config.check_interval);
}
+ if(restarting)
+ execvp(_argv[0],_argv);
}
break;
default:
throw runtime_error(string(__PRETTY_FUNCTION__)+": internal error");
}
}catch(exception& e) {
cerr << "Oops: " << e.what() << endl;
return 1;
}
}