6 * Copyright (C) 1987 by the Massachusetts Institute of Technology
7 * For copying and distribution information, please see the file
10 * This program starts the moira server in a "clean" environment.
11 * and then waits for it to exit.
16 static char *rcsid_mr_starter_c = "$Header$";
19 #include <mit-copyright.h>
23 #include <sys/types.h>
26 #include <sys/signal.h>
27 #include <sys/ioctl.h>
30 #include <sys/resource.h>
31 #include <moira_site.h>
42 int stat, serrno = errno;
47 while (waitpid(-1, &stat, WNOHANG) > 0) {
48 if (WIFEXITED(stat)) {
49 if (WEXITSTATUS(stat)) {
51 "exited with code %d\n",
53 send_zgram("startmoira", buf);
56 if (WIFSIGNALED(stat)) {
57 sprintf(buf, "exited on signal %d%s\n",
59 (WCOREDUMP(stat)?"; Core dumped":0));
60 if(WCOREDUMP(stat)) send_zgram("startmoira", buf);
62 write(rdpipe[1], buf, strlen(buf));
74 int logf, inf, i, done, pid, tty;
78 extern char *sys_errlist[];
80 struct sigaction action;
85 getrlimit(RLIMIT_NOFILE, &rl);
88 action.sa_handler = cleanup;
90 sigemptyset(&action.sa_mask);
91 sigaction(SIGCHLD, &action, NULL);
93 sprintf(buf, "%s/moira.log", SMS_DIR);
94 logf = open(buf, O_CREAT|O_WRONLY|O_APPEND, 0640);
99 inf = open("/dev/null", O_RDONLY , 0);
117 sprintf(buf, "%s/%s", BIN_DIR, PROG);
119 if ((pid = fork()) == 0) {
124 for (i = 3; i <nfds; i++) close(i);
126 perror("cannot run moirad");
130 perror("moira_starter");
134 log = fdopen(logf, "w");
135 prog = fdopen(rdpipe[0], "r");
144 if (fgets(buf, BUFSIZ, prog) == NULL) {
145 if (errno && errno!=EINTR) {
146 strcpy(buf, "Unable to read from program: ");
147 strcat(buf, sys_errlist[errno]);
152 time_s = ctime(&foo)+4;
153 time_s[strlen(time_s)-6]='\0';
154 fprintf(log, "%s %s", time_s, buf);