/* This is PIM process information manager. * This is the interface to the machine /proc and * based on its process table openlava implements * the getJInfo_() API that returns runtime * resource usage. */ int main(int argc, char **argv) { char *sp; char *traceVal; char *myHost; char *env_dir=NULL; int cc; myHost = "localhost"; while ((cc = getopt(argc, argv, "12Vd:")) != EOF) { switch (cc) { case 'd': env_dir = optarg; break; case '1': pim_debug = 1; break; case '2': pim_debug = 2; break; case 'V': fputs(_LS_VERSION_, stderr); return 0; case '?': default: usage(argv[0]); return -1; } } if (env_dir == NULL) { if ((env_dir = getenv("LSF_ENVDIR")) == NULL) { env_dir = "/etc"; } } if (initenv_(pimParams, env_dir) < 0) { sp = getenv("LSF_LOGDIR"); if (sp != NULL) pimParams[LSF_LOGDIR].paramValue = sp; ls_openlog("pim", pimParams[LSF_LOGDIR].paramValue, (pim_debug == 2), pimParams[LSF_LOG_MASK].paramValue); ls_syslog(LOG_ERR, "%s: initenv_() failed %s.", __func__, env_dir); return -1; } if (!pim_debug && pimParams[LSF_LIM_DEBUG].paramValue) { pim_debug = atoi(pimParams[LSF_LIM_DEBUG].paramValue); if (pim_debug <= 0) pim_debug = 1; } traceVal = NULL; if (pimParams[LSF_PIM_TRACE].paramValue) { traceVal = pimParams[LSF_PIM_TRACE].paramValue; } else if (pimParams[LSF_DEBUG_PIM].paramValue) { traceVal = pimParams[LSF_DEBUG_PIM].paramValue; } getLogClass_(traceVal, pimParams[LSF_TIME_PIM].paramValue); if (pim_debug > 1) ls_openlog("pim", pimParams[LSF_LOGDIR].paramValue, TRUE, "LOG_DEBUG"); else ls_openlog("pim", pimParams[LSF_LOGDIR].paramValue, FALSE, pimParams[LSF_LOG_MASK].paramValue); if ((sp = pimParams[LSF_PIM_SLEEPTIME].paramValue)) { if ((sleepTime = atoi(sp) < 0)) { ls_syslog(LOG_ERR, "\ %s: LSF_PIM_SLEEPTIME value %s must be a positive integer, set to %d", __func__, sp, PIM_SLEEP_TIME); sleepTime = PIM_SLEEP_TIME; } }
int ctrlSbdDebug(struct debugReq *pdebug) { static char fname[]="ctrlSbdDebug()"; int opCode; int level; int newClass; int options; char logFileName[MAXLSFNAMELEN]; char lsfLogDir[MAXPATHLEN]; char *dir; char dynDbgEnv[MAXPATHLEN]; memset(logFileName, 0, sizeof(logFileName)); memset(lsfLogDir, 0, sizeof(lsfLogDir)); opCode = pdebug->opCode; level = pdebug->level; newClass = pdebug->logClass; options = pdebug->options; if (pdebug->logFileName[0] != '\0') { if (((dir = strrchr(pdebug->logFileName,'/')) != NULL) || ((dir = strrchr(pdebug->logFileName,'\\')) != NULL)) { dir++; ls_strcat(logFileName, sizeof(logFileName), dir); *(--dir) = '\0'; ls_strcat(lsfLogDir, sizeof(lsfLogDir), pdebug->logFileName); } else { ls_strcat(logFileName, sizeof(logFileName), pdebug->logFileName); if (daemonParams[LSF_LOGDIR].paramValue && *(daemonParams[LSF_LOGDIR].paramValue)) { ls_strcat(lsfLogDir, sizeof(lsfLogDir), daemonParams[LSF_LOGDIR].paramValue); } else { lsfLogDir[0] = '\0'; } } ls_strcat(logFileName, sizeof(logFileName), ".sbatchd"); } else { ls_strcat(logFileName, sizeof(logFileName), "sbatchd"); if (daemonParams[LSF_LOGDIR].paramValue && *(daemonParams[LSF_LOGDIR].paramValue)) { ls_strcat(lsfLogDir, sizeof(lsfLogDir), daemonParams[LSF_LOGDIR].paramValue); } else { lsfLogDir[0] = '\0'; } } if (options==1) { struct config_param *plp; for (plp = daemonParams; plp->paramName != NULL; plp++) { if (plp->paramValue != NULL) FREEUP(plp->paramValue); } if (initenv_(daemonParams, env_dir) < 0){ ls_openlog("sbatchd", daemonParams[LSF_LOGDIR].paramValue, (debug > 1), daemonParams[LSF_LOG_MASK].paramValue); ls_syslog(LOG_ERR, I18N_FUNC_FAIL_MM, fname, "initenv_"); die(SLAVE_FATAL); return -1; } getLogClass_(daemonParams[LSB_DEBUG_SBD].paramValue, daemonParams[LSB_TIME_SBD].paramValue); closelog(); if (debug > 1) ls_openlog("sbatchd", daemonParams[LSF_LOGDIR].paramValue, TRUE, daemonParams[LSF_LOG_MASK].paramValue); else ls_openlog("sbatchd", daemonParams[LSF_LOGDIR].paramValue, FALSE, daemonParams[LSF_LOG_MASK].paramValue); if (logclass & LC_TRACE) ls_syslog(LOG_DEBUG, "%s: logclass=%x", fname, logclass); cleanDynDbgEnv(); return(LSBE_NO_ERROR); } if (opCode==SBD_DEBUG) { putMaskLevel(level, &(daemonParams[LSF_LOG_MASK].paramValue)); if (newClass>=0) { logclass = newClass; sprintf(dynDbgEnv, "%d", logclass); putEnv("DYN_DBG_LOGCLASS", dynDbgEnv); } if ( pdebug->level>=0 ){ closelog(); if (debug > 1) ls_openlog(logFileName, lsfLogDir, TRUE, daemonParams[LSF_LOG_MASK].paramValue); else ls_openlog(logFileName, lsfLogDir, FALSE, daemonParams[LSF_LOG_MASK].paramValue); putEnv("DYN_DBG_LOGDIR", lsfLogDir); putEnv("DYN_DBG_LOGFILENAME", logFileName); sprintf(dynDbgEnv, "%d", pdebug->level); putEnv("DYN_DBG_LOGLEVEL", dynDbgEnv); } } else if (opCode == SBD_TIMING) { if (level>=0) timinglevel = level; if (pdebug->logFileName[0] != '\0') { if (debug > 1) ls_openlog(logFileName, lsfLogDir, TRUE, daemonParams[LSF_LOG_MASK].paramValue); else ls_openlog(logFileName, lsfLogDir, FALSE, daemonParams[LSF_LOG_MASK].paramValue); } } else { ls_perror("No this debug command!\n"); return -1; } return (LSBE_NO_ERROR); }
int main(int argc, char **argv) { static char fname[] = "res/main"; int nready; int maxfd; int i; char *sp; char *pathname = NULL; int didSomething = 0; char exbuf; time_t thisPeriodic, lastPeriodic = 0, timeDiff; fd_set rm, wm, em; int sbdPty = FALSE; char *sbdClHost = NULL; ushort sbdClPort = 0; char **sbdArgv = NULL; int selectError = 0; _i18n_init(I18N_CAT_RES); saveDaemonDir_(argv[0]); for (i=1; i<argc; i++) { if (strcmp(argv[i], "-d") == 0 && argv[i+1] != NULL) { pathname = argv[i+1]; putEnv("LSF_ENVDIR",pathname); break; } } if (pathname == NULL) { if ((pathname = getenv("LSF_ENVDIR")) == NULL) pathname = LSETCDIR; } if (argc > 1) { if (!strcmp(argv[1],"-V")) { fputs(_LS_VERSION_, stderr); exit(0); } } if ((ls_readconfenv(resConfParams, NULL) < 0) || (initenv_(resParams, pathname) < 0) ) { if ((sp = getenv("LSF_LOGDIR")) != NULL) resParams[LSF_LOGDIR].paramValue = sp; ls_openlog("res", resParams[LSF_LOGDIR].paramValue, (debug > 1), resParams[LSF_LOG_MASK].paramValue); ls_syslog(LOG_ERR, I18N_FUNC_S_FAIL_MM, fname, "initenv_", pathname); ls_syslog(LOG_ERR, I18N_Exiting); exit(-1); } restart_argc = argc; restart_argv = argv; for (i=1; i<argc; i++) { if (strcmp(argv[i], "-d") == 0 && argv[i+1] != NULL) { pathname = argv[i+1]; i++; continue; } if (strcmp(argv[i], "-1") == 0) { debug = 1; continue; } if (strcmp(argv[i], "-2") == 0) { debug = 2; continue; } if (strcmp(argv[i], "-PTY_FIX") == 0) { printf("PTY_FIX"); exit(0); } if ( (strcmp(argv[i], "-j") == 0) && (argv[i+1] != NULL) ) { lsbJobStarter = argv[++i]; continue; } if (strcmp(argv[i], "-P") == 0) { sbdPty = TRUE; continue; } if (strcmp(argv[i], "-i") == 0) { sbdFlags |= SBD_FLAG_STDIN; continue; } if (strcmp(argv[i], "-o") == 0) { sbdFlags |= SBD_FLAG_STDOUT; continue; } if (strcmp(argv[i], "-e") == 0) { sbdFlags |= SBD_FLAG_STDERR; continue; } if (strcmp(argv[i], "-m") == 0 && argv[i+1] != NULL) { sbdClHost = argv[i+1]; i++; sbdMode = TRUE; continue; } if (strcmp(argv[i], "-p") == 0 && argv[i+1] != NULL) { sbdClPort = atoi(argv[i+1]); i++; sbdMode = TRUE; continue; } if (argv[i][0] != '-') { sbdMode = TRUE; sbdArgv = argv + i; break; } usage(argv[0]); } if (sbdMode) { if (sbdClHost == NULL || sbdArgv == NULL) { usage(argv[0]); exit(-1); } if (sbdClPort) { sbdFlags |= SBD_FLAG_TERM; } else { sbdFlags |= SBD_FLAG_STDIN | SBD_FLAG_STDOUT | SBD_FLAG_STDERR; } } else { if (debug < 2) for (i = sysconf(_SC_OPEN_MAX) ; i >= 0 ; i--) close(i); } if (resParams[LSF_SERVERDIR].paramValue == NULL) { ls_openlog("res", resParams[LSF_LOGDIR].paramValue, (debug > 1), resParams[LSF_LOG_MASK].paramValue); ls_syslog(LOG_ERR, _i18n_msg_get(ls_catd , NL_SETN, 5001, "LSF_SERVERDIR not defined in %s/lsf.conf: %M; res exiting"), /* catgets 5001 */ pathname); resExit_(-1); } if (! debug && resParams[LSF_RES_DEBUG].paramValue != NULL) { debug = atoi(resParams[LSF_RES_DEBUG].paramValue); if (debug <= 0) debug = 1; } getLogClass_(resParams[LSF_DEBUG_RES].paramValue, resParams[LSF_TIME_RES].paramValue); if (getuid() == 0 && debug) { if (sbdMode) { debug = 0; } else { ls_openlog("res", resParams[LSF_LOGDIR].paramValue, FALSE, resParams[LSF_LOG_MASK].paramValue); ls_syslog(LOG_ERR, I18N(5005,"Root cannot run RES in debug mode ... exiting."));/*catgets 5005 */ exit(-1); } } if (debug > 1) ls_openlog("res", resParams[LSF_LOGDIR].paramValue, TRUE, "LOG_DEBUG"); else { ls_openlog("res", resParams[LSF_LOGDIR].paramValue, FALSE, resParams[LSF_LOG_MASK].paramValue); } if (logclass & (LC_TRACE | LC_HANG)) ls_syslog(LOG_DEBUG, "%s: logclass=%x", fname, logclass); ls_syslog(LOG_DEBUG, "%s: LSF_SERVERDIR=%s", fname, resParams[LSF_SERVERDIR].paramValue); init_res(); initSignals(); periodic(0); if (sbdMode) { lsbJobStart(sbdArgv, sbdClPort, sbdClHost, sbdPty); } maxfd = FD_SETSIZE; for (;;) { struct timeval *timep; struct timeval timeout; loop: didSomething = 0; for (i = 0; i < child_cnt; i++) { if (children[i]->backClnPtr == NULL && !FD_IS_VALID(conn2NIOS.sock.fd) && children[i]->running == 0) { delete_child (children[i]); } } if (logclass & LC_TRACE) { ls_syslog(LOG_DEBUG,"\ %s: %s Res child_res=<%d> child_go=<%d> child_cnt=<%d> client_cnt=<%d>", fname, ((child_res) ? "Application" : "Root") , child_res, child_go, child_cnt, client_cnt); if (child_cnt == 1 && children != NULL && children[0] != NULL) { dumpChild(children[0], 1, "in main()"); } } if (child_res && child_go && child_cnt == 0 && client_cnt == 0) { if (debug > 1) printf (" \n Child <%d> Retired! \n", (int)getpid()); if (logclass & LC_TRACE) { ls_syslog(LOG_DEBUG,"\ %s: Application Res is exiting.....", fname); } millisleep_(5000); if (sbdMode) { close(1); close(2); exit(lastChildExitStatus); } resExit_(EXIT_NO_ERROR); }
void init_res (void) { static char fname[] = "init_res"; int i, maxfds; if (logclass & (LC_TRACE | LC_HANG)) ls_syslog (LOG_DEBUG, "%s: Entering this routine...", fname); if (!sbdMode) { if (!debug) { if (geteuid () || getuid ()) { fprintf (stderr, "RES should be run as root.\n"); fflush (stderr); resExit_ (1); } chdir ("/tmp"); } if (debug <= 1) { daemonize_ (); ls_openlog ("res", resParams[LSF_LOGDIR].paramValue, 0, resParams[LSF_LOG_MASK].paramValue); umask (0); nice (NICE_LEAST); } } if ((Myhost = ls_getmyhostname ()) == NULL) { ls_syslog (LOG_ERR, I18N_FUNC_FAIL_MM, fname, "ls_getmyhostname"); resExit_ (-1); } if (isatty (0)) { tcgetattr (0, &defaultTty.attr); defaultTty.ws.ws_row = 24; defaultTty.ws.ws_col = 80; defaultTty.ws.ws_xpixel = defaultTty.ws.ws_ypixel = 0; } else { defaultTty.ws.ws_row = 24; defaultTty.ws.ws_col = 80; defaultTty.ws.ws_xpixel = defaultTty.ws.ws_ypixel = 0; } if (!sbdMode) { init_AcceptSock (); } client_cnt = child_cnt = 0; for (i = 0; i < MAXCLIENTS_HIGHWATER_MARK + 1; i++) { clients[i] = NULL; } children = (struct child **) calloc (sysconf (_SC_OPEN_MAX), sizeof (struct children *)); if (!children) { ls_syslog (LOG_ERR, I18N_FUNC_FAIL_M, fname, "calloc"); resExit_ (-1); } maxfds = sysconf (_SC_OPEN_MAX); for (i = 0; i < maxfds; i++) { children[i] = NULL; } initConn2NIOS (); resNotifyList = listCreate ("resNotifyList"); if (!resNotifyList) { ls_syslog (LOG_ERR, I18N_FUNC_FAIL_M, fname, "listCreate"); resExit_ (-1); } ls_syslog (LOG_INFO, (_i18n_msg_get (ls_catd, NL_SETN, 5346, "Daemon started"))); /* catgets 5346 */ initResLog (); }