To analyze the job output/error with a script, I added
STDIN/STDOUT/STDERR environment variables in jobcomp/script. 
>From 72d9a282117a067bdd9a0ca37e7a61df478d927d Mon Sep 17 00:00:00 2001
From: Hongjia Cao <[email protected]>
Date: Wed, 6 Mar 2013 22:40:24 +0800
Subject: [PATCH] add environment variables STDIN/STDOUT/STDERR in
 jobcomp/script

---
 src/plugins/jobcomp/script/jobcomp_script.c |   21 +++++++++++++++++++++
 1 个文件被修改,插入 21 行(+)

diff --git a/src/plugins/jobcomp/script/jobcomp_script.c b/src/plugins/jobcomp/script/jobcomp_script.c
index 12ed94b..f3de862 100644
--- a/src/plugins/jobcomp/script/jobcomp_script.c
+++ b/src/plugins/jobcomp/script/jobcomp_script.c
@@ -189,6 +189,9 @@ struct jobcomp_info {
 	char *jobstate;
 	char *account;
 	char *work_dir;
+	char *std_in;
+	char *std_out;
+	char *std_err;
 #ifdef HAVE_BG
 	char *connect_type;
 	char *geometry;
@@ -246,6 +249,15 @@ static struct jobcomp_info * _jobcomp_info_create (struct job_record *job)
 		j->work_dir = xstrdup(job->details->work_dir);
 	else
 		j->work_dir = xstrdup("unknown");
+	if (job->details) {
+		if (job->details->std_in)
+			j->std_in = xstrdup(job->details->std_in);
+		if (job->details->std_out)
+			j->std_out = xstrdup(job->details->std_out);
+		if (job->details->std_err)
+			j->std_err = xstrdup(job->details->std_err);
+	}
+		
 #ifdef HAVE_BG
 	j->connect_type = select_g_select_jobinfo_xstrdup(job->select_jobinfo,
 						   SELECT_PRINT_CONNECTION);
@@ -267,6 +279,9 @@ static void _jobcomp_info_destroy (struct jobcomp_info *j)
 	xfree (j->jobstate);
 	xfree (j->account);
 	xfree (j->work_dir);
+	xfree (j->std_in);
+	xfree (j->std_out);
+	xfree (j->std_err);
 #ifdef HAVE_BG
 	xfree (j->connect_type);
 	xfree (j->geometry);
@@ -379,6 +394,12 @@ static char ** _create_environment (struct jobcomp_info *job)
 	_env_append (&env, "JOBSTATE",  job->jobstate);
 	_env_append (&env, "PARTITION", job->partition);
 	_env_append (&env, "WORK_DIR",  job->work_dir);
+	if (job->std_in)
+		_env_append (&env, "STDIN",     job->std_in);
+	if (job->std_out)
+		_env_append (&env, "STDOUT",     job->std_out);
+	if (job->std_err)
+		_env_append (&env, "STDERR",     job->std_err);
 
 #ifdef HAVE_BG
 	_env_append (&env, "BLOCKID",      job->blockid);
-- 
1.7.10.4

Reply via email to