Need help making a start/stop script...


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Need help making a start/stop script...
# 1  
Old 10-24-2009
Need help making a start/stop script...

i have two separate scripts that work nicely to curl and generate two files.. one html and one txt so a total of four.

When the script starts up i want it to:
call and run shellscripta
call and run shellscriptb
sleep for about 40 seconds
again run shellscripta
again run shellscriptb
check and make sure both txta and txtb exist then..
check for any differences..
if they are the same than continue loop/sleep
if the two text files contain different data
email user@somewhere.com with the data of both files then continue loop
--loop stops when i run 'xcommand stop'


There are two parts of this that's difficult for me.. one is creating a loop that starts and stops when i tell it.. the other is the portion that checks for differences then emails.. the script has to 'head -n4' both text files to see if there are any differences.. if there are i need it to 'mail' me both parts of the text files 'head -n5' (5th line containing the date so i know what's oldvsnew).. i hope i'm making some sense but any help would be great
# 2  
Old 10-24-2009
what have you tried till now??
# 3  
Old 10-24-2009
It would be something similar to a initd startup script.. Smilie

Code:
  #!/bin/sh
  
  case "$1" in
    start)
      #Not entirely sure of how I would loop this sequence w/o cron
      #Also, on second try and consecutive thereafter it needs to 
      #first check to make sure that at least two txt files reside
      #in the current directory.. I haven't implemented this yet here since
      #i'm not sure of how it would loop
        
        ./page4mod0.sh &&;
	./page4mod99.sh &&;
        sleep 45;
        ;;
     #Not sure how to approach this part.. i could have it diff'd then compared in a temp file
     #or throw them into variables then compared.. think i'd prefer memory here though so let's try..
          A=`head -n4 pagemod.txt`
          B=`head -n4 pagemod0.txt`
           if [ "$A" = "$B" ]
           then #Do nothing
           echo >dev/null
           else 
          C=`head -n5 pagemod.txt`
          D=`head -n5 pagemod0.txt`
           mail@user@home.com -f `echo "$C -----  $D" > mailer.txt ;cat pagemod.txt >> mailer.txt ; cat pagemod0.txt >> mailer.txt`
          fi
        ;;
    stop)
        echo -n "Shutdown and cleanup"
        kill -9 page4mod0.sh;
        kill -9 page4mod0.sh;
	rm *.html *.txt;
        ;;
    restart)
        #This isn't entirely necessary now but it would be nice if i could tell it
	#to run the stop sequence.. wait.. then start it back up again.. later

    status)
        # Again not entirely necessary but just check for process other than 
	#the current and report pid
        ;;
    *)
        ## If no parameters are given, print which are avaiable.
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac


Last edited by phpfreak; 10-24-2009 at 10:34 PM..
# 4  
Old 10-25-2009
Hi phpfreak,

Here are a couple of off-the-cuff comments :
  • you need a PATH statement at the start of your script with the directories of all the external programs you are going to call from your script
  • call your own scripts and files you manipulate using absolute paths, not relative paths
  • depending on your intention either:
    - use & instead of && for background processing followed by a wait statement after the sleep statement
    - use && operator to start processes only when previous command succeeds but then loose the semicolons
  • do not use kill -9 unless you have to . Use kill first and then check. If not successful use other kill options or move directly on to kill -9.
  • use a colon ( : ) as an idle statement instead of echo>/dev/null or use [ "$A" != "$B" ]
  • You might want to brush up the mail command
  • You can not kill processes, you need process id's (pids). Either save those at the start of a process in a tmp file or distill it from ps -ef
  • You probably want to put all the statements either in a wrapper script or a function that contains the 45 second loop with the script calls, the comparison and the mail section and that you start perpetually in the background using:
    nohup /path/to/wrapperscript &
    The stop start script then just stops/starts/status checks that wrapper script
  • you can create a perpetual loop using
    Code:
    while : ; do
      your statements
    done

  • for the restart option you can use:
    Code:
    $0 stop; $0 start

  • Use exit statements to indicate error levels
Enough for now, have fun!

Last edited by Scrutinizer; 10-25-2009 at 06:41 AM..
# 5  
Old 10-25-2009
Bug

This is what i've got so far..

Code:
#!/bin/sh
  
  case "$1" in
    start)
	while : ; do
            ./pager.sh &&
            sleep 30
            ./pager99.sh &&

                if [ -f "pagemod.txt" ]
                then
                    :
                else
                    echo "The pagemod text was not generated during loop!"
                fi
                if [ -f "pagemod0.txt" ]
                then
                    :
                else
                    echo "The pagemod0 text was not generated during loop!"
                fi
				#COMPARE TXTS AND DETERMINE ACTION
				A=`cat pagemod.txt | head -1`                                                                        
				B=`cat pagemod.txt | head -2 | tail -1`                                                        
				C=`cat pagemod.txt | head -3 | tail -1`                                                                
				D=`cat pagemod0.txt | head -1`                                                                
				E=`cat pagemod0.txt | head -2 | tail -1`                                                        
				F=`cat pagemod0.txt | head -3 | tail -1`                                                        
				if                                                                                
					test $D -eq $A                                                                                        
					test $E -eq $B                                                                                        
					test $F -eq $C                                                                                        
				then                                        
					:                                                
				else    
					cp page0.html page0BAK.html
					cp page99.html page99BAK.html
					cp pagemod.txt pagemodBAK.txt
					cp pagemod0.txt pagemod0BAK.txt
					echo 	"Pager Report
							unimportant texts and links" >pageralert
					mail -s "Alert! Pager Report" pager <pageralert                                           
				fi 
			done
        ;;
    stop)
                #TBD/Pending conversion using wrapper
        ;;
    status)
                echo "Currently running under the following pid:
                #`ps | grep $SOME_PID | grep -v grep | cut -c 1-5`
                "
        ;;
    *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
        ;;
esac

As far as using relative paths you make a point but i don't intend on moving them besides i want them to break if they do get copied elsewhere. As far as the background process issue, I do want them to complete so I added the extra but I would like to see an example of the wait command. I don't think i've ever used that yet. With the extra & I wonder if the script will run slower although speed is not of the utmost importance. Converted the idles. At first you lost me with the wrapper idea but i think i get it.. is it if I contain the loop, then for stopping the process it'll make it easier for the parent script?


*yaaaawwnnnss
BBSTSP
 
Login or Register to Ask a Question

Previous Thread | Next Thread

8 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Shell script to stop and start server

Hi, I need to create a shell script for automated server patching, with the following scenario: I have two Linux servers Primary and secondary. Server patching should start on Primary 1st and then secondary. 1st check both servers are up and running. Then stop primary and patching will... (1 Reply)
Discussion started by: rcroyal88
1 Replies

2. Shell Programming and Scripting

Shell Script for Websphere MQ Queue Manager start/stop

Hello All, I am completely new to shell scripting. I had to write a script that starts and stop the queue manager in Websphere MQ. We are on Linux 64-bit patform. The script should stop the queue manager and all the processes related to websphere MQ. It should be a clean stop. Once the queue... (3 Replies)
Discussion started by: pady1224
3 Replies

3. Solaris

Stop/start script problem on Solaris-10

I have Big brother script, which start/stop Big Brother processes. Something got change on server and now I am not able to start/stop it. There is no change in script, as I compared it from other server. This service is being managed by bb user (group is also bb). root@tsazdq04:/#... (6 Replies)
Discussion started by: solaris_1977
6 Replies

4. UNIX for Dummies Questions & Answers

Why does fibonacci sequence script stop making sense at 92nd iteration?

So, Just for practice, I wrote a simple fibonacci sequence script in bash. (03:08:02\$ cat fib #!/usr/bin/bash ret () { echo -ne "\n" sleep .5 } a=1 b=2 echo -n $a #1 A ret echo -n $b #2 B ret (8 Replies)
Discussion started by: DeCoTwc
8 Replies

5. Shell Programming and Scripting

Help with stop/start Shell Script.

Hi All, I would like to develop a shell script for stop & start an application server (1-4) on Solaris box. Here are the user requirements for this task. 1. User will input the option which server they wish to stop. 2. Will clear cache files from specific location. 3. ... (1 Reply)
Discussion started by: venga
1 Replies

6. Shell Programming and Scripting

Start Stop Restart

I'm wondering how I should make a script that can start, stop, and restart another script. What I need to be able to do, is start and stop a perl script from the command line. The easiest way of doing this seems to be to have another script, starting and stopping the other script. I have BASH,... (7 Replies)
Discussion started by: Bakes
7 Replies

7. UNIX for Dummies Questions & Answers

Making a Script to Start as a Service

Hi, I have a shell script t1.sh. on my solaris box. So, what are the steps required to make this script run as a Service, when the system re-starts. (for ex:- at run level 3). I know that I should use the rc.d folders. But I don't know the exact steps. Kindly explain, Thanks in... (3 Replies)
Discussion started by: S.Vishwanath
3 Replies

8. UNIX for Dummies Questions & Answers

Start/Stop Script

I'm a newbie to the Unix world Help! I have to maintain a host of Sybase database servers sitting on Unix Sun Solaris 8...I've been tasked with finding/creating a way to auto start/stop Unix via unix commands, specifically when the Unix servers need to be restarted we want Sybase to start... (2 Replies)
Discussion started by: jjv1
2 Replies
Login or Register to Ask a Question