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.
|