summaryrefslogtreecommitdiffabout
path: root/src/dudki.cc
Unidiff
Diffstat (limited to 'src/dudki.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--src/dudki.cc61
1 files changed, 39 insertions, 22 deletions
diff --git a/src/dudki.cc b/src/dudki.cc
index b4e95a7..e91ad5e 100644
--- a/src/dudki.cc
+++ b/src/dudki.cc
@@ -64,5 +64,3 @@ int main(int argc,char **argv) {
64 op_work, 64 op_work,
65 op_hup, 65 op_signal,
66 op_term,
67 op_check,
68 op_ensure, 66 op_ensure,
@@ -70,2 +68,3 @@ int main(int argc,char **argv) {
70 } op = op_default; 68 } op = op_default;
69 int op_signum = 0;
71 while(true) { 70 while(true) {
@@ -95,3 +94,4 @@ int main(int argc,char **argv) {
95 cerr << PHEADER << endl 94 cerr << PHEADER << endl
96 << PCOPY << endl << endl << 95 << PCOPY << endl << endl
96 << " " << argv[0] << " [options] [processes]" << endl << endl <<
97#ifdef HAVE_GETOPT_LONG 97#ifdef HAVE_GETOPT_LONG
@@ -104,5 +104,7 @@ int main(int argc,char **argv) {
104 "\n" 104 "\n"
105 " -k, --kill stop running instance\n" 105 " -k, --kill stop running instance (send SIGTERM)\n"
106 " -r, --reload reload running instance (send SIGHUP)\n" 106 " -r, --reload reload running instance (send SIGHUP)\n"
107 " -c, --check check if dudki is running\n" 107 " -c, --check check if the process is running\n"
108 " (the above commands operate on dudki itself if no\n"
109 " process name has been specified)\n"
108 " -e, --ensure ensure that dudki is running\n" 110 " -e, --ensure ensure that dudki is running\n"
@@ -115,5 +117,7 @@ int main(int argc,char **argv) {
115 "\n" 117 "\n"
116 " -k stop running instance\n" 118 " -k stop running instance (send SIGTERM)\n"
117 " -r reload running instance (send SIGHUP)\n" 119 " -r reload running instance (send SIGHUP)\n"
118 " -c check if dudki is running\n" 120 " -c check if the process is running\n"
121 " (the above commands operate on dudki itself if no\n"
122 " process name has been specified)\n"
119 " -e ensure that dudki is running\n" 123 " -e ensure that dudki is running\n"
@@ -141,3 +145,3 @@ int main(int argc,char **argv) {
141 } 145 }
142 op = op_term; 146 op = op_signal; op_signum = SIGTERM;
143 break; 147 break;
@@ -148,3 +152,3 @@ int main(int argc,char **argv) {
148 } 152 }
149 op = op_hup; 153 op = op_signal; op_signum = SIGHUP;
150 break; 154 break;
@@ -155,3 +159,3 @@ int main(int argc,char **argv) {
155 } 159 }
156 op = op_check; 160 op = op_signal; op_signum = 0;
157 break; 161 break;
@@ -189,14 +193,27 @@ int main(int argc,char **argv) {
189 break; 193 break;
190 case op_hup: 194 case op_signal:
191 signal_self(config,SIGHUP); 195 try {
192 break; 196 if(optind>=argc) {
193 case op_term: 197 signal_self(config,op_signum);
194 signal_self(config,SIGTERM); 198 }else{
195 break; 199 int failures = 0;
196 case op_check: 200 for(int narg=optind;narg<argc;narg++) {
197 try{ 201 try {
198 signal_self(config,0); 202 processes_t::const_iterator i = config.processes.find(argv[narg]);
199 exit(0); 203 if(i==config.processes.end())
204 throw runtime_error("no such process configured");
205 i->second.signal(op_signum);
206 }catch(exception& e) {
207 cerr << "dudki(" << argv[narg] << "): " << e.what() << endl;
208 failures++;
209 }
210 }
211 if(failures)
212 throw runtime_error("not all processes have been successfully signaled");
213 }
214 if(!op_signum)
215 exit(0);
200 }catch(exception& e) { 216 }catch(exception& e) {
201 exit(1); 217 if(!op_signum)
218 exit(1);
202 } 219 }