i have a problem i have created followning sh files some years ago but now it dosen`t work anymore i never used it a long time. Can anyone find the Error? Its always runs the stop() block and trying to Killing the Server also if i try to start or creat a new one.
#!/bin/sh
stop()
{
echo "Killing old shoutcast servers in $1"
for oldpid in `ps -A | grep "$1" | grep "sc_serv" | cut -c 0-6`
do
kill -9 $oldpid
done
rm -f $HOME/$1/shoutcast.pid
}
start()
{
servcount=0
for cfile in `ls $HOME/$1`
do
echo -n $cfile
echo -n " -> "
#grep ^RelayServer /etc/shoutcast/$cfile
grep ^RelayServer $HOME/$1/$cfile
# This is the line where we actually run the shoutcast program!
#sudo -u nobody /home/shoutcast/sc_serv /home/shoutcast/$cfile > /dev/null &
$HOME/$1/sc_serv $HOME/$1/$cfile > /dev/null &
servcount=`expr $servcount + 1`
done
#Create the pid file...
ps -A | grep "$1" | grep "sc_serv" | cut -c 0-6 > $HOME/$1/shoutcast.pid
#Done now!
echo "Started $servcount servers in $1."
}
creat()
{
if [[ -d "$1" ]]
then
echo "ERROR: STREAM $1 already exists !!"
else
mkdir -p $HOME/$1
cp -f sc_serv $HOME/$1/.
touch $HOME/$1/sc_serv.cfg
echo "Creating the CONFIG file $HOME/$1/sc_serv.cfg..."
echo "Enter MaxUser: "
read listener
echo "Enter Password: "
read pass
echo "Enter PortBase: "
read port
echo "Enter AdminPassword: "
read apass
echo "MaxUser=$listener" > $HOME/$1/sc_serv.cfg
echo "Password=$pass" >> $HOME/$1/sc_serv.cfg
echo "PortBase=$port" >> $HOME/$1/sc_serv.cfg
echo "LogFile=sc_serv.log" >> $HOME/$1/sc_serv.cfg
echo "RealTime=1" >> $HOME/$1/sc_serv.cfg
echo "ScreenLog=1" >> $HOME/$1/sc_serv.cfg
echo "ShowLastSongs=10" >> $HOME/$1/sc_serv.cfg
echo "W3CEnable=Yes" >> $HOME/$1/sc_serv.cfg
echo "W3CLog=sc_w3c.log" >> $HOME/$1/sc_serv.cfg
echo "SrcIP=ANY" >> $HOME/$1/sc_serv.cfg
echo "DestIP=ANY" >> $HOME/$1/sc_serv.cfg
echo "Yport=80" >> $HOME/$1/sc_serv.cfg
echo "NameLookups=0" >> $HOME/$1/sc_serv.cfg
echo "AdminPassword=$apass" >> $HOME/$1/sc_serv.cfg
echo "AutoDumpUsers=0" >> $HOME/$1/sc_serv.cfg
echo "AutoDumpSourceTime=30" >> $HOME/$1/sc_serv.cfg
echo "TitleFormat=%s" >> $HOME/$1/sc_serv.cfg
echo "PublicServer=default" >> $HOME/$1/sc_serv.cfg
echo "AllowRelay=Yes" >> $HOME/$1/sc_serv.cfg
echo "AllowPublicRelay=Yes" >> $HOME/$1/sc_serv.cfg
echo "MetaInterval=32768" >> $HOME/$1/sc_serv.cfg
fi
}
case "$1" in
start)
if [[ ! -e $HOME/$2/shoutcast.pid ]]
then
start $2
if [[ -e $HOME/$2/shoutcast.pid ]]
then
echo "Shoutcast $2 Startup...... [SUCCESS]"
fi
else
echo "Shoutcast $2 Startup...... [FAILED]"
fi
;;
restart)
stop $2
sleep 4
start $2
if [[ -e $HOME/$2/shoutcast.pid ]]
then
echo "Shoutcast $2 Startup...... [SUCCESS]"
fi
;;
stop)
if [[ -e $HOME/$2/shoutcast.pid ]]
then
stop $2
echo "Shoutcast $2 shutdown...... [SUCCESS]"
else
echo "There are no registered shoutcast servers running right now in $2. Attempting to kill anyways."
stop $2
fi
;;
creat)
creat $2
if [[ -d "$2" ]]
then
echo "Shoutcast $2 folder created...... [SUCCESS]"
else
echo "Shoutcast $2 folder created...... [FAILED]"
fi
;;
*)
echo "Usage: sh ./shoutcast.sh (start|stop|restart|creat) (FOLDER_NAME)"
;;
esac
In sh you should use single squared brackets, not double ones those are not POSIX shell syntax (some shells may allow them but they are not part of the syntax). Debian uses a strict POSIX shell (dash) as /bin/sh
So if [ ! -e $HOME/$2/shoutcast.pid ] instead of if [[ ! -e $HOME/$2/shoutcast.pid ]]
It should give you a syntax error, but I doubt if it would cause the behavior you are describing.
Yes scrutinizer I am fussy on the orthodoxy side ... thats because in older times HP-UX was very strict in ksh , what could run on aix 4.3 may not on hpux10... and so I had the habit to be very strict myself and test first on hpux hehe...
Now about our friend who corrected for me ( was and still am very busy ) I took the time to test the script:
modified a bit the script and got:
n12:/sm/cron/bin/wks/test $ whats_wrong stop
this is line 3
whats_wrong[4]: 0403-057 Syntax error at line 4 : `(' is not expected.
So I looked again at the script and corrected it:
#!/bin/sh
echo this is line 3
fstop()
{
echo "Killing old shoutcast servers in $1"
# for oldpid in `ps -A | grep "$1" | grep "sc_serv" | cut -c 0-6`
# do
# kill -9 $oldpid
# done
# rm -f $HOME/$1/shoutcast.pid
read kyb
}
fstart()
{
servcount=0
for cfile in `ls $HOME/$1`
do
echo -n $cfile
echo -n " -> "
#grep ^RelayServer /etc/shoutcast/$cfile
grep ^RelayServer $HOME/$1/$cfile
# This is the line where we actually run the shoutcast program!
#sudo -u nobody /home/shoutcast/sc_serv /home/shoutcast/$cfile > /dev/null &
$HOME/$1/sc_serv $HOME/$1/$cfile > /dev/null &
servcount=`expr $servcount + 1`
done
#Create the pid file...
ps -A | grep "$1" | grep "sc_serv" | cut -c 0-6 > $HOME/$1/shoutcast.pid
#Done now!
echo "Started $servcount servers in $1."
}
fcreat()
{
if [[ -d "$1" ]]
then
echo "ERROR: STREAM $1 already exists !!"
else
mkdir -p $HOME/$1
cp -f sc_serv $HOME/$1/.
touch $HOME/$1/sc_serv.cfg
echo "Creating the CONFIG file $HOME/$1/sc_serv.cfg..."
echo "Enter MaxUser: "
read listener
echo "Enter Password: "
read pass
echo "Enter PortBase: "
read port
echo "Enter AdminPassword: "
read apass
echo "MaxUser=$listener" > $HOME/$1/sc_serv.cfg
echo "Password=$pass" >> $HOME/$1/sc_serv.cfg
echo "PortBase=$port" >> $HOME/$1/sc_serv.cfg
echo "LogFile=sc_serv.log" >> $HOME/$1/sc_serv.cfg
echo "RealTime=1" >> $HOME/$1/sc_serv.cfg
echo "ScreenLog=1" >> $HOME/$1/sc_serv.cfg
echo "ShowLastSongs=10" >> $HOME/$1/sc_serv.cfg
echo "W3CEnable=Yes" >> $HOME/$1/sc_serv.cfg
echo "W3CLog=sc_w3c.log" >> $HOME/$1/sc_serv.cfg
echo "SrcIP=ANY" >> $HOME/$1/sc_serv.cfg
echo "DestIP=ANY" >> $HOME/$1/sc_serv.cfg
echo "Yport=80" >> $HOME/$1/sc_serv.cfg
echo "NameLookups=0" >> $HOME/$1/sc_serv.cfg
echo "AdminPassword=$apass" >> $HOME/$1/sc_serv.cfg
echo "AutoDumpUsers=0" >> $HOME/$1/sc_serv.cfg
echo "AutoDumpSourceTime=30" >> $HOME/$1/sc_serv.cfg
echo "TitleFormat=%s" >> $HOME/$1/sc_serv.cfg
echo "PublicServer=default" >> $HOME/$1/sc_serv.cfg
echo "AllowRelay=Yes" >> $HOME/$1/sc_serv.cfg
echo "AllowPublicRelay=Yes" >> $HOME/$1/sc_serv.cfg
echo "MetaInterval=32768" >> $HOME/$1/sc_serv.cfg
fi
}
case $1 in
'start')
if [[ ! -e $HOME/$2/shoutcast.pid ]]
then
fstart $2
if [[ -e $HOME/$2/shoutcast.pid ]]
then
echo "Shoutcast $2 Startup...... [SUCCESS]"
fi
else
echo "Shoutcast $2 Startup...... [FAILED]"
fi
;;
'restart')
fstop $2
sleep 4
fstart $2
if [[ -e $HOME/$2/shoutcast.pid ]]
then
echo "Shoutcast $2 Startup...... [SUCCESS]"
fi
;;
'stop')
if [[ -e $HOME/$2/shoutcast.pid ]]
then
fstop $2
echo "Shoutcast $2 shutdown...... [SUCCESS]"
else
echo "There are no registered shoutcast servers running right now in $2. Attempt
ing to kill anyways."
fstop $2
fi
;;
'creat')
fcreat $2
if [[ -d "$2" ]]
then
echo "Shoutcast $2 folder created...... [SUCCESS]"
else
echo "Shoutcast $2 folder created...... [FAILED]"
fi
;;
*)
echo "Usage: sh ./shoutcast.sh (start|stop|restart|creat) (FOLDER_NAME)"
;;
esac
I have no means of testing but should work now...
IMHO it is NEVER a good idea to give to functions the names of argument you expect...
This is what I get now:
n12:/sm/cron/bin/wks/test $ whats_wrong stop
this is line 3
There are no registered shoutcast servers running right now in . Attempting to kill anyways.
Killing old shoutcast servers in
Dont forget to remove my comments in ftop function and the read kyb...