A shell script to run a script which don't get terminated and send a pattern from the output by mail


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting A shell script to run a script which don't get terminated and send a pattern from the output by mail
# 1  
A shell script to run a script which don't get terminated and send a pattern from the output by mail

Hi Guys,

I am very new to shell script and I need your help here to write a script. Actually, I have a script abc.sh which don't get terminated itself. So I need to design a script to run this script, save the output to a file, search for a given string in the output and if it exists send those lines over email.

Also, the script abc.sh need to be terminated as it don't get terminated. Now, I am running the script and have to do CTRL+C to get to next prompt.

Any suggestions is highly appreciated.

Thanks,
Sam
# 2  
Whenever you start a thread in this forum it is a good idea to tell us what operating system and shell you're using.

We could be lazy and say that you should rewrite abc.sh to do what it is supposed to do and exit instead of looping forever, but since we have no idea what it is supposed to do, this might not be possible.

If abc.sh runs forever, it is not possible to write a script that runs it and then checks the contents of a file. One could start it asynchronously and occasionally check its output file, but since you haven't told us what output file(s) it creates nor what output you're hoping to find, it is hard for us to guess at how to do that.

If you showed us the contents of abc.sh (in CODE tags), showed us the output it produces (in CODE tags), and showed us the email you're hoping to produce (in CODE tags); we might have a much better chance of helping you.
# 3  
Hi Don,

I will explain it in a better way. Linux is the operating system and using bash shell.

So the requirement is as below:

We have a script called testit_tas.sh to test the servers which don't get terminated and we pass CTRL+C to kill it everytime. Below is the content of the script:

Code:
!#/bin/bash

./ctftestdump 10.240.56.1 8100 querytas.txt

So when we run this script (./testit_tas.sh) we get this below output on the terminal and it don't get completed. So we kill it manually
Code:
[sasahu@cts-pro-mgmt-srv1 idc_test_tool]$ ./testit_tas.sh
./testit_tas.sh: line 1: !#/bin/bash: No such file or directory
Level Zero : trying to connect/close host 10.240.56.1 at port 8100...
in connect
out connect
Send:[5022=LoginUser|5028=red3|5029=red3|5026=1]
Send:[5022=QueryTas|4=564|5=EA|5045=1|5026=1003]
Send:[5022=QueryTas|4=193|5=E:CUSAN.E|5045=1|5026=1004]
Send:[5022=QueryTas|4=558|5=E|5045=1|5026=1005]
Send:[5022=QueryTas|4=627|5=E:VOD|5045=1|5026=1006]
Send:[5022=QueryTas|4=824|5=E:AASB-ME|5045=1|5026=1007]
Send:[5022=QueryTas|4=205|5=E:SHFIN|5045=1|5026=1008]
Send:[5022=QueryTas|4=216|5=E:2INVE|5045=1|5026=1009]
Send:[5022=QueryTas|4=257|5=E:AT00000FACC2-EUR|5045=1|5026=1010]
Send:[5022=QueryTas|4=873|5=E:AHAN|5045=1|5026=1011]
5026=1|5001=0<ETX>
5022=QueryTas|4=205|5=E:SHFIN|5045=1|5026=1008|5001=-46<ETX>
5022=QueryTas|4=824|5=E:AASB-ME|5045=1|5026=1007|5001=-46<ETX>
5022=QueryTas|4=216|5=E:2INVE|5045=1|5026=1009|5001=-46<ETX>
5001=-203|5026=1003<ETX>
5001=-203|5026=1004<ETX>
5001=-203|5026=1005<ETX>
5001=-203|5026=1010<ETX>
5001=-203|5026=1011<ETX>
^C[sasahu@cts-pro-mgmt-srv1 idc_test_tool]$

So from above output, we need to search the lines for 5001=-46<ETX> and capture these lines. -46 is error. So we want to capture this and alert only these lines over email to specific people.

Once this script is written, we will schedule it in crontab which will run 3 times to do this check.

Also, I know that to abort the script we can find the process id and kill it but am not sure how to include this.

TIA.

Regards,
Sambit
# 4  
On top of what Don Cragun asked, there are some more informations that could help to taylor a solution:

Is ctftestdump your (company's) own command or script, i.e. are you responsible and in a position to analyse / modify it? How is it to be terminated under normal circumstances? Does it deliver a (meaningful?) exit status? Is that reliable and could be exploited for your purpose?

You seemingly post stdout from your command / script - what is querytas.txt for? After how many 5001=-46<ETX> occurrences should the new script terminate / send the e-mails? How long should it wait for that string? Is 46 the only error number? Is <ETX> that literal ASCII string or the ASCII control code "end of text" (0x03)?
cron sends e-mails with a job's output when it finishes - would that be sufficient to accomplish the task?

BTW: The shebang you tried to use is the wrong way round. Make it #!.
# 5  
Hi Rudy,

Below are some of the responses to your queries:


Is
Code:
ctftestdump

your (company's) own command or script, i.e. are you responsible and in a position to analyse / modify it? How is it to be terminated under normal circumstances? Does it deliver a (meaningful?) exit status? Is that reliable and could be exploited for your purpose?


I think its a binary file which accepts arguments and we cannot modify it. We cant exploit it.

what is
Code:
querytas.txt

for?


It holds the queries/requests which need to be sent.
Code:
[sasahu@cts-pro-mgmt-srv1 idc_test_tool]$ cat querytas.txt
5022=LoginUser|5028=red3|5029=red3|5026=1
5022=QueryTas|4=564|5=EA|5045=1|5026=1003
5022=QueryTas|4=193|5=E:CUSAN.E|5045=1|5026=1004
5022=QueryTas|4=558|5=E|5045=1|5026=1005
5022=QueryTas|4=627|5=E:VOD|5045=1|5026=1006
5022=QueryTas|4=824|5=E:AASB-ME|5045=1|5026=1007
5022=QueryTas|4=205|5=E:SHFIN|5045=1|5026=1008
5022=QueryTas|4=216|5=E:2INVE|5045=1|5026=1009
5022=QueryTas|4=257|5=E:AT00000FACC2-EUR|5045=1|5026=1010
5022=QueryTas|4=873|5=E:AHAN|5045=1|5026=1011

After how many
Code:
5001=-46<ETX>

occurrences should the new script terminate / send the e-mails? How long should it wait for that string? Is 46 the only error number?


When we run the
Code:
testit_tas.sh

, it gives the output instantly. There is nothing like we need to wait for some number of occurences of -46. It gives the output instantly and we can terminate it instantly. Below is some information about the output:
So there are three possibilities for the output (remember the response will have the 5026=xxxxx which matches the request)


1. Data is returned
Code:
3=564|4=564|5=AAL|269=15|55=40002379|5061=2989|5055=2045|479=t|10=55.28|11=3|1206=0|16=1519894802.4412|12=52.62|13=10|2001=0|2003=0|478=t|5026=117032<ETX>
5001=0|5026=117032<ETX>

the first line is the data itself, with the 5026=117032
the second line is the response terminator 5001=0

2. Error -46 is returned
Code:
5022=QueryTas|4=824|5=E:AASB-ME|5045=1|5026=27023|5001=-46<ETX>

This is what we want to capture and send an alert over email.

3. A different error is returned.
Code:
5001=-203|5026=87029<ETX>

In this case the error is -203. There could be other errors. This is not urgent issue and we don't need to capture it for now.

cron sends e-mails with a job's output when it finishes - would that be sufficient to accomplish the task?

It would be better if we can just report the lines(represents which markets) contains
Code:
5001=-46

(Error) so that further investigation can be done.

So, in short we need to run the
Code:
testit_tas.sh

3 times a day to check the server and if there are error (-46) in the output, we will report specific user over email. I hope, I was able to define the requirement

Thanks,
Sam
# 6  
Hmm - it's not quite clear how the command terminates, or why it does not. Nor, if the number of error lines is predefined or open. Howsoever, how far would
Code:
MAILTO=userlist
0 23 * * *    /absolute/path/to/ctftestdump 10.240.56.1 8100 querytas.txt | /absolute/path/to/grep "5001=-46<ETX>"

in crontab get you? It extracts the required error from the output and mails it to userlist. Adapt the date / time fields according to your needs.
# 7  
Hi Rudy,

This we can do but the problem is how we can terminate. I have tried few things.

Below is the output when I am just running the script.
Code:
[sasahu@cts-pro-mgmt-srv1 idc_test_tool]$ /opt/operations/vbenghiat/idc_test_tool/ctftestdump 10.240.56.1 8100 querytas.txt
Level Zero : trying to connect/close host 10.240.56.1 at port 8100...
in connect
out connect
Send:[5022=LoginUser|5028=red3|5029=red3|5026=1]
Send:[5022=QueryTas|4=564|5=EA|5045=1|5026=1003]
Send:[5022=QueryTas|4=193|5=E:CUSAN.E|5045=1|5026=1004]
Send:[5022=QueryTas|4=558|5=E|5045=1|5026=1005]
Send:[5022=QueryTas|4=627|5=E:VOD|5045=1|5026=1006]
Send:[5022=QueryTas|4=824|5=E:AASB-ME|5045=1|5026=1007]
Send:[5022=QueryTas|4=205|5=E:SHFIN|5045=1|5026=1008]
Send:[5022=QueryTas|4=216|5=E:2INVE|5045=1|5026=1009]
Send:[5022=QueryTas|4=257|5=E:AT00000FACC2-EUR|5045=1|5026=1010]
Send:[5022=QueryTas|4=873|5=E:AHAN|5045=1|5026=1011]
5026=1|5001=0<ETX>
5022=QueryTas|4=205|5=E:SHFIN|5045=1|5026=1008|5001=-46<ETX>
3=193|4=193|5=E:CUSAN.E|269=15|10=2.76|11=15250|55=161047660|192=10786|211=6|25=161047|668=1|16=1520860247.6936|12=2.75|13=17773|5026=1004<ETX>
5001=0|5026=1004<ETX>
3=564|4=564|5=EA|269=15|55=91222753|5061=179204|5055=2046|478=t|12=127.12|13=1|16=1520860342.8007|10=129.35|11=9|2001=0|2003=0|479=p|5026=1003<ETX>
5001=0|5026=1003<ETX>
3=873|4=873|5=E:AHAN|269=15|10=5.49|12=5|13=1500|25=95909000|16=1520845149.9286|11=999|5026=1011<ETX>
5001=0|5026=1011<ETX>
3=558|4=558|5=E|269=15|55=91554105528000|5061=250530|5055=2169|479=t|11=7|16=1520860554.1262|12=33.75|13=18|10=33.79|2001=15|2003=0|478=p|5026=1005<ETX>
5001=0|5026=1005<ETX>
5022=QueryTas|4=824|5=E:AASB-ME|5045=1|5026=1007|5001=-46<ETX>
5022=QueryTas|4=216|5=E:2INVE|5045=1|5026=1009|5001=-46<ETX>
3=257|4=257|5=E:AT00000FACC2-EUR|269=15|1642=0|1643=0|298=0|285=0|277=0|297=0|284=0|276=0|442=0|460=0|16=1520828196.5021|5026=1010<ETX>
5001=0|5026=1010<ETX>
^C
[sasahu@cts-pro-mgmt-srv1 idc_test_tool]$

Below are the errors:
Code:
[sasahu@cts-pro-mgmt-srv1 idc_test_tool]$ /opt/operations/vbenghiat/idc_test_tool/ctftestdump 10.240.56.1 8100 querytas.txt > tmp.txt
Send:[5022=LoginUser|5028=red3|5029=red3|5026=1]
Send:[5022=QueryTas|4=564|5=EA|5045=1|5026=1003]
Send:[5022=QueryTas|4=193|5=E:CUSAN.E|5045=1|5026=1004]
Send:[5022=QueryTas|4=558|5=E|5045=1|5026=1005]
Send:[5022=QueryTas|4=627|5=E:VOD|5045=1|5026=1006]
Send:[5022=QueryTas|4=824|5=E:AASB-ME|5045=1|5026=1007]
Send:[5022=QueryTas|4=205|5=E:SHFIN|5045=1|5026=1008]
Send:[5022=QueryTas|4=216|5=E:2INVE|5045=1|5026=1009]
Send:[5022=QueryTas|4=257|5=E:AT00000FACC2-EUR|5045=1|5026=1010]
Send:[5022=QueryTas|4=873|5=E:AHAN|5045=1|5026=1011]

So as per your thought, we can do this in cron:
Code:
[sasahu@cts-pro-mgmt-srv1 idc_test_tool]$ /opt/operations/vbenghiat/idc_test_tool/ctftestdump 10.240.56.1 8100 querytas.txt 2> /dev/null | grep "5001=-46<ETX>"
5022=QueryTas|4=824|5=E:AASB-ME|5045=1|5026=1007|5001=-46<ETX>
5022=QueryTas|4=205|5=E:SHFIN|5045=1|5026=1008|5001=-46<ETX>
5022=QueryTas|4=216|5=E:2INVE|5045=1|5026=1009|5001=-46<ETX>
^C
[sasahu@cts-pro-mgmt-srv1 idc_test_tool]$

And we get the desired output which we can send it over email. But the issue is how we can terminate. Is it some way we can kill the running PID here. This can be resolved then.

thanks,
Sam
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #69
Difficulty: Easy
Grep stands for 'global regular expression process'.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Shell script to send mail alert

Hi I have below shell script to send mail alert , however I want to add more functionality in this script and that is , script should only check that file between 9 am to 5pm , and if there is no activity in this time 9 am to 5 pm for 2hours then it should give me mail alert, please help... (2 Replies)
Discussion started by: scazed
2 Replies

2. Shell Programming and Scripting

Run a script before and after reboot automatically and send output to two locations.

Hello Team . I am working a health check script ( bash) to run on linux server ( RedHat) and requirements are 1. The o/p of script need to be send to two diff files . I am testing with tee command . But I am not successful yet , any recommendations if that is the right approach ? 2. The same... (2 Replies)
Discussion started by: Varja
2 Replies

3. Shell Programming and Scripting

C shell script wont terminated if i don't modify the shebang

Hi all, I'm new to shell script i wrote some shell script for my colleague, everyone is fine,except on user we are using VNC viewer to work and there are some script start with shebang #! /bin/csh there is an user will not terminate after running the script even if a hello world i need... (5 Replies)
Discussion started by: pilistar0222
5 Replies

4. Shell Programming and Scripting

To send a mail through shell script

I want to send a mail through shell script,If it is possible Please give me a code. mail id : upload.xxx@example.com (8 Replies)
Discussion started by: kannansoft1985
8 Replies

5. Shell Programming and Scripting

How to write this script:- check output word and send a mail?

Hi Guys, I am not Good at scripting. I need to write a script such that if output of command shows the particular word in output then send mail to abc@compay.com -bash-3.2$ ps -ef | grep bpbkar root 6040 1 0 13:05:19 ? 0:00 bpbkar -r 2678400 -ru root -dt 47395 -to 0... (20 Replies)
Discussion started by: manalisharmabe
20 Replies

6. Shell Programming and Scripting

Run sql script and send to mail if not empty?

Thanks again for helping me out. I was wondering if anyone else has encountered this issue. I have a SQL script that produces a list -however we are only interested in that list if the length is not zero Here is the sql file named dailyBalance.sql select * from Balance where... (1 Reply)
Discussion started by: Astrocloud
1 Replies

7. Shell Programming and Scripting

how to run a script using cron job and send the output as attachment via e-mail using unix

how to run a script using cron job and send the output as attachment via e-mail using unix. please help me. how my cron job entry should be? As of now my cron job entry is to run the script at specific time, 15 03 * * * /path/sample.sh | mail -s "Logs" email_id In the above entry, what... (8 Replies)
Discussion started by: vidhyaS
8 Replies

8. Shell Programming and Scripting

Shell script to send a mail

Hi , I need to prepare a script which will check my database with specific to particluar table. If the row count exceeds a certain limit, i need to send a mail to a set of Recipients. Being new to unix, please guide me to complete this task. Advance thanks, Sekar. (4 Replies)
Discussion started by: Sekar1
4 Replies

9. Shell Programming and Scripting

shell script to send a mail

Hi, I need a shell script which runs in the backround for all the 24 hours and send a mail to us regarding the output of the prstat command when the load average increase above certain percent. kindly help me on this...... (1 Reply)
Discussion started by: jayaramanit
1 Replies

10. Shell Programming and Scripting

Send e-mail in Shell script

How to send an error mail from a shell script e.g. mail destination_adr@blabla.int "Message : here an error message " thanks, Ann. (1 Reply)
Discussion started by: annelisa
1 Replies

Featured Tech Videos