int main( int argc, char **argv ) { int c; int runMode = SERVER; int flagval = 0; char *logDir = NULL; char *tmpStr; int logFd; ProcessType = XMSG_SERVER_PT; // capture server properties try { irods::server_properties::instance().capture_if_needed(); } catch ( const irods::exception& e ) { rodsLog( LOG_ERROR, e.what() ); return e.code(); } #ifndef _WIN32 signal( SIGINT, signalExit ); signal( SIGHUP, signalExit ); signal( SIGTERM, signalExit ); signal( SIGUSR1, signalExit ); signal( SIGPIPE, rsPipeSignalHandler ); #endif /* Handle option to log sql commands */ tmpStr = getenv( SP_LOG_SQL ); if ( tmpStr != NULL ) { rodsLogSqlReq( 1 ); } /* Set the logging level */ tmpStr = getenv( SP_LOG_LEVEL ); if ( tmpStr != NULL ) { int i; i = atoi( tmpStr ); rodsLogLevel( i ); } else { rodsLogLevel( LOG_NOTICE ); /* default */ } while ( ( c = getopt( argc, argv, "sSc:vD:" ) ) != EOF ) { switch ( c ) { case 's': runMode = SINGLE_PASS; break; case 'S': runMode = STANDALONE_SERVER; break; case 'v': /* verbose */ flagval |= v_FLAG; break; case 'c': loopCnt = atoi( optarg ); break; case 'D': /* user specified a log directory */ logDir = strdup( optarg ); break; default: usage( argv[0] ); exit( 1 ); } } if ( ( logFd = logFileOpen( runMode, logDir, XMSG_SVR_LOGFILE ) ) < 0 ) { exit( 1 ); } irods::error ret = setRECacheSaltFromEnv(); if ( !ret.ok() ) { rodsLog( LOG_ERROR, "irodsXmsgServer::main: Failed to set RE cache mutex name\n%s", ret.result().c_str() ); exit( 1 ); } daemonize( runMode, logFd ); xmsgServerMain(); sleep( 5 ); exit( 0 ); }
int main(int argc, char **argv) { int status; int c; rsComm_t rsComm; int runMode = IRODS_SERVER; int flagval = 0; char *logDir = NULL; char *tmpStr; int logFd; char *ruleExecId = NULL; int jobType = 0; ProcessType = RE_SERVER_PT; #ifdef RUN_SERVER_AS_ROOT #ifndef windows_platform if (initServiceUser() < 0) { exit (1); } #endif #endif #ifndef _WIN32 signal(SIGINT, signalExit); signal(SIGHUP, signalExit); signal(SIGTERM, signalExit); signal(SIGUSR1, signalExit); signal(SIGPIPE, rsPipSigalHandler); /* XXXXX switched to SIG_DFL for embedded python. child process * went away. But probably have to call waitpid. * signal(SIGCHLD, SIG_IGN); */ signal(SIGCHLD, SIG_DFL); #endif /* Handle option to log sql commands */ tmpStr = getenv (SP_LOG_SQL); if (tmpStr != NULL) { #ifdef IRODS_SYSLOG int j = atoi(tmpStr); rodsLogSqlReq(j); #else rodsLogSqlReq(1); #endif } /* Set the logging level */ tmpStr = getenv (SP_LOG_LEVEL); if (tmpStr != NULL) { int i; i = atoi(tmpStr); rodsLogLevel(i); } else { rodsLogLevel(LOG_NOTICE); /* default */ } #ifdef IRODS_SYSLOG /* Open a connection to syslog */ openlog("rodsReServer",LOG_ODELAY|LOG_PID,LOG_DAEMON); #endif while ((c=getopt(argc, argv,"sSvD:j:t:")) != EOF) { switch (c) { case 's': runMode = SINGLE_PASS; break; case 'S': runMode = STANDALONE_SERVER; break; case 'v': /* verbose */ flagval |= v_FLAG; break; case 'D': /* user specified a log directory */ logDir = strdup (optarg); break; case 'j': runMode = SINGLE_PASS; ruleExecId = strdup (optarg); break; case 't': jobType = atoi (optarg); break; default: usage (argv[0]); exit (1); } } status = initRsComm (&rsComm); if (status < 0) { cleanupAndExit (status); } if ((logFd = logFileOpen (runMode, logDir, RULE_EXEC_LOGFILE)) < 0) { exit (1); } daemonize (runMode, logFd); #ifdef RULE_ENGINE_N status = initAgent (RULE_ENGINE_INIT_CACHE, &rsComm); #else status = initAgent (&rsComm); #endif if (status < 0) { cleanupAndExit (status); } if (ruleExecId != NULL) { status = reServerSingleExec (&rsComm, ruleExecId, jobType); if (status >= 0) { exit (0); } else { exit (1); } } else { reServerMain (&rsComm); } cleanupAndExit (status); exit (0); }