diff -urN torque-2.5.9/src/server/req_runjob.c torque-2.5.9.server_prologue/src/server/req_runjob.c --- torque-2.5.9/src/server/req_runjob.c 2011-08-26 22:24:29.000000000 +0100 +++ torque-2.5.9.server_prologue/src/server/req_runjob.c 2012-04-25 18:06:49.311369126 +0100 @@ -82,6 +82,7 @@ #include /* the master config generated by configure */ +#include #include #include #include @@ -138,6 +139,7 @@ static int svr_strtjob2(job *, struct batch_request *); static job *chk_job_torun(struct batch_request *, int); static int assign_hosts(job *, char *, int, char *, char *); +static int svr_prologue(job *, struct batch_request *); /* Global Data Items: */ @@ -1047,6 +1049,9 @@ svr_setjobstate(pjob,JOB_STATE_RUNNING,JOB_SUBSTATE_PRERUN); + /* server side prologue script, A. Pickford - 2012-04-25 */ + svr_prologue(pjob, preq); + /* if job start timeout attribute is set use its value */ if (((server.sv_attr[(int)SRV_ATR_JobStartTimeout].at_flags & ATR_VFLAG_SET) != 0) @@ -1816,5 +1821,59 @@ } /* END assign_hosts() */ +static int svr_prologue(job *pjob, struct batch_request *preq) +{ + extern char *PAddrToString(pbs_net_t *); + char tmpLine[1024]; + char tmpHost[256]; + char tmpID[256]; + char tmpUser[256]; + int i; + int rc; + int fd_prologue; + struct stat sbuf; + char prologueFile[] = "/var/spool/torque/server_priv/prologue"; + + rc = stat(prologueFile, &sbuf); + if (rc != 0) { + if (LOGLEVEL >= 3) { + i = errno; + sprintf(tmpLine, "svr_prologue; rc stat returned: %i, errno: %i, %s", rc, i, strerror(i)); + log_event(PBSEVENT_JOB, PBS_EVENTCLASS_JOB, pjob->ji_qs.ji_jobid, tmpLine); + } + return -1; + } + + strcpy(tmpUser, pjob->ji_wattr[JOB_ATR_euser].at_val.at_str); + + strcpy(tmpHost, pjob->ji_wattr[JOB_ATR_exec_host].at_val.at_str); + for (i = 0; i < 1024 && tmpHost[i] != 0; ++i) { + if (tmpHost[i] == '/') { + tmpHost[i] = 0; + break; + } + } + + strcpy(tmpID, pjob->ji_qs.ji_jobid); + for (i = 0; i < 1024 && tmpID[i] != 0; ++i) { + if (tmpID[i] == '.') { + tmpID[i] = 0; + break; + } + } + + if (LOGLEVEL >= 3) { + sprintf(tmpLine, "svr_prologue; running server prologue file for: %s %s %s", tmpID, tmpUser, tmpHost); + log_event(PBSEVENT_JOB, PBS_EVENTCLASS_JOB, pjob->ji_qs.ji_jobid, tmpLine); + } + + sprintf(tmpLine, "%s %s %s %s", prologueFile, tmpID, tmpUser, tmpHost); + rc = system(tmpLine); + + if (rc != 0) return -2; + + return 0; +} + /* END req_runjob.c */