help in script needed


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers help in script needed
# 1  
Old 08-07-2011
help in script needed

Hi,

I am developing a script for writing out the failed jobs in file,

1)First step i need to create an empty file Status with today's date.

2)After that i need to execute the below command:
Code:
dsjob -server servername -user uname -password pwd  -ljobs projectname

This will listout all the jobs in a project

job1
job2
job3

3)For each of the jobs listed out, i need to execute the below command:
Code:
dsjob -server servername -user uname -password pwd -jobinfo $job_name

$job_name will be replaced by job1 ,job2 and job3 in each run.

For example in the case of job1,
Code:
dsjob -server servername -user uname -password pwd -jobinfo $job1

It will return the output like:
Code:
Job Status      : RUN FAILED (3)
Job Controller  : not available
Job Start Time  : Sun Feb 20 23:57:14 2011
Job Wave Number : 1
User Status     : not available
Job Control     : 1
Interim Status  : NOT RUNNING (99)
Invocation ID   : not available
Last Run Time   : Sun Feb 20 23:58:51 2011
Job Process ID  : 0
Invocation List : job1

Since it contains Job Status : RUN FAILED (3) , the name "job1" need to be entered into the file created in the first step.
If it doesn't contain the term " RUN FAILED (3)" we need not write in to that file.,

For this i have developed the below script:

Code:
touch status.`date +%m`.`date +%d`.txt

for job_name in `/opt/app/dstage/DataStage752/Ascential/DataStage/DSEngine/bin/dsjob -server servername -user uname -password pwd -ljobs prjname `

/opt/app/dstage/DataStage752/Ascential/DataStage/DSEngine/bin/dsjob -server servername -user uname -password pwd -jobinfo $job_name | grep "Job Status      : RUN FAILED (3)"

if [ $? -eq 0 ]
do echo  $job_name >> /home/status.`date +%m`.`date +%d`.txt
done
fi
done

The first 2 steps are executing fine in the script.

But the third one is not working fine,.

It throws some error in the third part.

Can anyone help me on this?

Thanks

Last edited by pludi; 08-08-2011 at 03:25 AM..
# 2  
Old 08-07-2011
An if statement requires a then and not do which is causing your error. I'd also change how you create your stats file name to make it more efficient.

Code:
# create stat file name with one date command, save it for use later
sfile=$(date "+status.%m.%d.txt")
touch $sfile

If the shell you're using doesn't support $(...) then use back-quotes, but this syntax is now preferred.

Code:
    if [ $? -eq 0 ]
    then
            echo $job_name >>$sfile   # use saved name rather than recomputing
    fi

You should also add the -q option to the grep command unless you really want to see all of the matches on the tty. It will also make grep a bit more efficient as it won't need to read all of the output.

Code:
grep -q "Job Status : RUN FAILED (3)"

If your grep doesn't support this, you can send the output to /dev/null.

Hope this helps.
This User Gave Thanks to agama For This Post:
# 3  
Old 08-07-2011
Quote:
Originally Posted by agama
An if statement requires a then and not do which is causing your error. I'd also change how you create your stats file name to make it more efficient.

Code:
# create stat file name with one date command, save it for use later
sfile=$(date "+status.%m.%d.txt")
touch $sfile

If the shell you're using doesn't support $(...) then use back-quotes, but this syntax is now preferred.

Code:
    if [ $? -eq 0 ]
    then
            echo $job_name >>$sfile   # use saved name rather than recomputing
    fi

You should also add the -q option to the grep command unless you really want to see all of the matches on the tty. It will also make grep a bit more efficient as it won't need to read all of the output.

Code:
grep -q "Job Status : RUN FAILED (3)"

If your grep doesn't support this, you can send the output to /dev/null.

Hope this helps.
Hi,

Actually i need to check the string "Job Status : RUN FAILED (3)" in the output of the command
Code:
/opt/app/dstage/DataStage752/Ascential/DataStage/DSEngine/bin/dsjob  -server servername -user uname -password pwd -jobinfo $job_name

But i suspect that the below command always return 0 as status code regardless of the string "Job Status : RUN FAILED (3)" in the output:
Code:
/opt/app/dstage/DataStage752/Ascential/DataStage/DSEngine/bin/dsjob  -server servername -user uname -password pwd -jobinfo $job_name | grep  "Job Status      : RUN FAILED (3)"

so $? always equals to 0 and all the jobs will be written into file.
Can anyone help me on this?

Thanks

Last edited by pludi; 08-08-2011 at 03:26 AM..
# 4  
Old 08-07-2011
Quote:
But i suspect that the below command always return 0 as status code regardless of the string "Job Status : RUN FAILED (3)" in the output:
Quote:/opt/app/dstage/DataStage752/Ascential/DataStage/DSEngine/bin/dsjob -server servername -user uname -password pwd -jobinfo $job_name | grep "Job Status : RUN FAILED (3)"

so $? always equals to 0 and all the jobs will be written into file.
The grep command should always exit with a non-zero code if the string was not found in the input text. Are you executing any commands between the grep and your if statement? If so, the $? value will be replaced with the value from that command and might thus always appear to be zero. Ensure that your if statement is immediately following the statement with grep. If it is, and you are still having problems, please post the whole script (it looks like you cut bits and pieces in your original post).
This User Gave Thanks to agama For This Post:
# 5  
Old 08-08-2011
i am struggling to get the aborted jobs alone

For example i have a job called 'job123' which has been finished fine .

So while executing the below code:
Code:
dsjob -serverservname-user uname -password pwd -jobinfo Prjname job123

it gives:
Code:
Job Status      : RUN OK (1) 
Job Controller  : not available 
Job Start Time  : Mon Feb 21 00:04:09 2011 
Job Wave Number : 1 
User Status     : not available 
Job Control     : 0 
Interim Status  : NOT RUNNING (99) 
Invocation ID   : not available 
Last Run Time   : Mon Feb 21 00:04:11 2011 
Job Process ID  : 0 
Invocation List : job123 
 
Status code = 0

So, while executing the below code:
Code:
dsjob -server servname -user uname -password pwd -jobinfo Prjname job123 
|grep "Job Status      : RUN FAILED (3)"

t should return non zero return code since it doesn't contain the search string.
so $? gives 1.

At the same time, the below code also returns 1(even though the search term is found).
Code:
dsjob -server servname -user uname -password pwd -jobinfo Prjname job123 
|grep "Job Status      : RUN OK (1)"

Can any one help me on this?

Thanks

Moderator's Comments:
Mod Comment Please use [CODE] tags (Image) instead of [QUOTE] tags (Image) when posting command lines, terminal output, ...


---------- Post updated at 01:25 PM ---------- Previous update was at 11:25 AM ----------

From the output:
Code:
Job Status      : RUN OK (1) 
Job Controller  : not available 
Job Start Time  : Sun Aug 07 00:04:09 2011 
Job Wave Number : 1 
User Status     : not available 
Job Control     : 0 
Interim Status  : NOT RUNNING (99) 
Invocation ID   : not available 
Last Run Time   : Sun Aug 07 00:04:11 2011 
Job Process ID  : 0 
Invocation List : job123 
 
Status code = 0

I need to search for the strings "Job Status : RUN OK (1)" and " Last Run Time : Sun Aug 07"(sysdate-1).

May i know how to do this in grep?

Thanks

---------- Post updated at 06:37 PM ---------- Previous update was at 01:25 PM ----------

May i know how to retrieve the three parts "Mon Aug 08" from date function?
For example if it's "Mon Aug 08" then i need to check whether "Sun Aug 07" present in the output of the command:
Code:
dsjob -server servname -user uname -password pwd -jobinfo Prjname job123

And also search for the string "FAILED" in the output of the above command. if both searches are found in the output of the above command then the name 'job123' should be written to a file.

Can anyone help me?

thanks

Last edited by pludi; 08-08-2011 at 03:28 AM..
# 6  
Old 08-09-2011
It is quite possible that the output from your dsjob command contains tab characters rather than spaces, and that would cause grep not to find your strings.

Try this as your grep expression:

Code:
"Job.*Status.*RUN.*FAILED"

That should search for the enough of the desired words, in order, without regard to intermediate whitespace (tabs or spaces) or special characters like the colon.

Unfortunately the date command is very inconsistent from version to version of *NIX. To that end, provided your awk supports the systime() and strftime() functions, this is probably the easiest way to get 'yesterday' in the string format that you want. It computes the current time, subtracts a day (86400 seconds) and finally formats it. The string is put into the shell variable "yesterday" which you can use on a grep command:
Code:
yesterday=$( awk 'BEGIN{ str=strftime( "%a %b %d", systime()-86400 ); print str; }')

Given that, use egrep to match both lines, and test the number of matched lines rather than the return code to determine if there was a "hit."

Code:
count=$(dsjob ---your parameters--- | egrep -c  "$yesterday|Job.*Status.*RUN.*FAILED")
if (( $count == 2 ))   
then
   echo "this job failed yesterday"
else
   echo "this job was successful, OR didn't run yesterday"
fi


Last edited by agama; 08-09-2011 at 11:14 PM.. Reason: fixed egrep
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Homework & Coursework Questions

Help needed for a script

TAG flow Between SDR and DELTA SDR is the Source table. Delta is the target table having one staging table and one Main table. Tags flows between SDR and Delta through ER gateway. From SDR (SDR.CUSTOMER_PRODUCT and SDR.CUSTOMER_PRODUCT_RELATIONSHIP) the Tags flows to ER... (2 Replies)
Discussion started by: patitapaban
2 Replies

2. Shell Programming and Scripting

Help Needed on Script

Hi team, I am looking to execute some command through xargs. $cat testfile | grep myloc alias myloc='cd /export/nfs-1sv-23/' I am trying to execute that alias as soon as i cat and grep ? I tried with $cat testfile | grep myloc | xargs --> no luck ... Can some one assist me with... (6 Replies)
Discussion started by: itsme488
6 Replies

3. Shell Programming and Scripting

Help needed for script

Hi, I have a big list like this --> 3285 3289 328D 3291 3295 3299 329D 32A1 I need to make it like --> 3285|3289|328D|3291|3295|3299|329D|32A1 Please suggest. This is Linux OS. (8 Replies)
Discussion started by: solaris_1977
8 Replies

4. Shell Programming and Scripting

Expect script help needed- script failing if router unavailable

Hey all. Sometimes I'm tasked to change some router configs for the entire network (over 3,000 Cisco routers). Most of the time its a global config parameter so its done with a loop and an IP list as its the same configuration change for all routers. This is working OK. However, sometimes an... (3 Replies)
Discussion started by: mrkz1974
3 Replies

5. Shell Programming and Scripting

Help Needed in Sh script

hi, Im trying to select from a sql using shell script and once i get count i need to add the count to the subject line and send mail to every1.. ex : Select count(*) from emp; In Shell script echo $PASSWORD|$ORACLE_HOME/bin/sqlplus $USERID@$DBNAME @$SCRIPT_DIR/emp_count.sql... (1 Reply)
Discussion started by: jkumsi
1 Replies

6. Shell Programming and Scripting

help needed for a script!!

Hi!! Im new to shell scripting. I have an important assignment to complete in my company tomorrow. Please help me. I have to write an interactive script which does the following thing: There is a file named ""rules"in a folder say /home/f1/ . This file contains text in the form: 123 345... (5 Replies)
Discussion started by: rahul195
5 Replies

7. Shell Programming and Scripting

Script needed!! - Please help

Hi All, I have a text file contains the follwoing info: HOST_CONFIG spbf1n01 3181 patrolpv "B6abbKEW5L1TCE5B282445" I E W A HOST_CONFIG spbf1n02 3181 patrolpv "B6abbKEW5L1TCE5B282445" I E W A HOST_CONFIG spbf1n03 3181 patrolpv "B6abbKEW5L1TCE5B282445" I E W A Whenever the String... (6 Replies)
Discussion started by: ntgobinath
6 Replies

8. UNIX and Linux Applications

script needed

hi i am new to linux world please help me,i have two files in diff location i need to compare both and i need to see difference b/w them ex /media/txt (file1) xxxxxx xxxxxx xxxxx xxxxxx xxxxxx /media/rev/ (file2) rev is a folder which contains some files so i need to compare the files in... (3 Replies)
Discussion started by: revenna
3 Replies

9. Shell Programming and Scripting

Script help needed

I have a code given below... ERROR=`grep "Job Status" ${LOG_FILE}` ERROR=${ERROR##*\(} ERROR=${ERROR%%\)*} if then echo "The job completed successfully" EXIT_STATUS=0 else echo "The job failed" EXIT_STATUS=1 fi can anybody tell me what is ERROR=${ERROR##*\(}... (1 Reply)
Discussion started by: Sagarddd
1 Replies

10. Shell Programming and Scripting

Script needed

Hi I am looking for the script which can move 1month old data from a TXT file.actully in this file data is appended on daily basis.pleasehalp me out. Thanks in advance (3 Replies)
Discussion started by: vpandey
3 Replies
Login or Register to Ask a Question

Featured Tech Videos