1 /*****************************************************************************\
3 ** Linux-Call-Router **
5 **---------------------------------------------------------------------------**
6 ** Copyright: Andreas Eversberg **
10 \*****************************************************************************/
19 #include <sys/types.h>
31 void sighandler(int sigset)
35 if (sigset == SIGPIPE)
37 printf("Signal received: %d\n", sigset);
42 int main(int argc, char *argv[])
46 char command[256], file[64] = "pbx";
48 printf("** PBX-Watch ***\n\n");
55 printf("Usage: pbxwatch (run | debug) [fork]\n");
56 printf("run = Starts PBX4Linux (pbx) and restart it on every crash.\n");
57 printf("debug = Starts PBX4Linux using debugger an restarts it on every crash.\n");
58 printf(" Log files and back trace are moved into a seperate directory.\n");
59 printf("fork = Option to make pbxwatch running as daemon.\n");
64 if (!(strcasecmp(argv[1],"run")))
67 if (!(strcasecmp(argv[1],"debug")))
74 if (!(strcasecmp(argv[2],"fork")))
83 fprintf(stderr, "Cannot fork!\n");
88 printf("PBX-Watch: Starting daemon.\n");
96 signal(SIGINT,sighandler);
97 signal(SIGHUP,sighandler);
98 signal(SIGTERM,sighandler);
99 signal(SIGPIPE,sighandler);
104 printf("*** RUNNING PBX4LINUX ***\n");
107 /* write debugger batch list */
108 SPRINT(command, "echo > /tmp/pbxwatch.batch -e \"handle SIGPIPE nostop\\\\nfile %s\\\\nrun start\\\\nbt\\\\n\"", file);
110 SPRINT(command, "gdb --quiet --batch -x \"/tmp/pbxwatch.batch\" 2>&1 | tee %s/crashreport", INSTALL_DATA);
111 printf("*** DEBUGGER STARTED ***\n");
112 ret = system(command);
113 printf("*** DEBUGGER FINISHED ***\n");
117 ret = system(command);
120 printf("*** PBX4LINUX exitted with return code %d ***\n", ret);
123 printf("*** PBX4LINUX CRASHED ***\n");
127 printf("*** WRITING LOG ***\n");
129 SPRINT(command, "mkdir \"%s/%d\" && mv \"%s/crashreport\" \"%s/%d\" && cp -a \"%s/debug*.log\" \"%s/%d\"\n", INSTALL_DATA, now, INSTALL_DATA, INSTALL_DATA, now, INSTALL_DATA, INSTALL_DATA, now);
133 printf("*** SLEEPING 10 SECONDS UNTIL RESTART ***\n");
139 signal(SIGINT,SIG_DFL);
140 signal(SIGHUP,SIG_DFL);
141 signal(SIGTERM,SIG_DFL);
142 signal(SIGPIPE,SIG_DFL);