How To Make A Start And 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).

It would be something similar to a initd startup script.

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
 

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

Enough for now, have fun!

Have a Unix Problem
Unix Forum - Do you have a UNIX Question?

Unix Books :-
UNIX Programming, Certification, System Administration, Performance Tuning Reference Books

Return to : - Unix System Administration Hints and Tips

(c) www.gotothings.com All material on this site is Copyright.
Every effort is made to ensure the content integrity.  Information used on this site is at your own risk.
All product names are trademarks of their respective companies.
The site www.gotothings.com is in no way affiliated with or endorsed by any company listed at this site.
Any unauthorised copying or mirroring is prohibited.