Start, stop, restart Wowza with PHP

Hello,

I am attempting to use PHP to start, stop and restart Wowza.

For doing this from the command line in Linux, I have the following script:

#!/bin/bash
#
# Startup script for Wowza Media Server
#
# chkconfig: - 80 20
# description: Wowza Media Server is a media server
#
#### BEGIN INIT INFO
# Provides:          WowzaMediaServer
# Required-Start:    $syslog $time $local_fs $remote_fs
# Required-Stop:     $syslog $time $local_fs $remote_fs
# Default-Start:     3 4 5
# Default-Stop:      S 0 1 2 6
# Short-Description: Wowza Media Server 3 Init Script
# Description:       Wowza Media Server 3 Init Script
### END INIT INFO
WMCOMMAND=${1}
FUNCTIONS_EXIST=false
if [ -f /etc/rc.d/init.d/functions ] ; then
     . /etc/rc.d/init.d/functions
     FUNCTIONS_EXIST=true
fi
if [ -f /etc/init.d/functions ] ; then
     . /etc/init.d/functions
     FUNCTIONS_EXIST=true
fi
if ! $FUNCTIONS_EXIST ; then
failure() {
  return 0
}
success() {
  return 0
}
fi
# define vars
RETVAL=0
WMSBASE_NAME=WowzaMediaServer
#WMSCONFIG_SCRIPT="/etc/WowzaMediaServer/$WMSBASE_NAME.conf"
WMSCONFIG_SCRIPT="/usr/local/WowzaMediaServer/bin/setenv.sh"
WMSLICENSE_FILE="/usr/local/WowzaMediaServer/conf/Server.license"
AMAZONEC2_INSTALL_SCRIPT="/usr/local/WowzaMediaServer/bin/AmazonEC2Install.sh"
WMSDAEMON_CMD=/usr/bin/WowzaMediaServerd
WMSPID_FILE="/var/run/$WMSBASE_NAME.pid"
WMSLOCK_FILE="/var/run/$WMSBASE_NAME"
if test -w "/var/lock/subsys" ; then
	WMSLOCK_FILE="/var/lock/subsys/$WMSBASE_NAME"
fi
SHUTDOWN_WAIT=20
[ -r "$WMSCONFIG_SCRIPT" ] && . "$WMSCONFIG_SCRIPT"
if ! test -f "${WMSLICENSE_FILE}" ; then
        echo ""
        echo "ERROR: Missing license file: (${WMSLICENSE_FILE})"
        echo "You must first run Wowza Media Server 3 in "
        echo "standalone mode to enter serial number. Execute the "
        echo "following commands to run in standalone mode:"
        echo ""
        echo "cd /usr/local/WowzaMediaServer"
        echo "./startup.sh"
        echo ""
        exit 0
fi
testjava=`which ${_EXECJAVA} 2>/dev/null`
if ! test -f "$testjava" ; then
	echo ""
	echo "ERROR: The Java command (${_EXECJAVA}) could not be found."
	echo "Search path: $PATH"
	echo "In most cases this problem can be fixed by adding a symbolic "
	echo "link to the Java command in the /usr/bin directory. "
	echo "To do this first execute the command \"which java\" to identify "
	echo "the full path to the Java executable. Next, create a symbolic "
	echo "link to this file with the command"
	echo "\"ln -sf [path-to-java] /usr/bin/java\" where [path-to-java] is "
	echo "the path returned by the \"which\" command."
	echo ""
	exit 0
fi
#
start() {
if [ -f $WMSPID_FILE ]; then
	read kpid < $WMSPID_FILE
	kill -9 $kpid
	echo $"$WMSBASE_NAME is already running ($kpid): stopping"
	rm -f $WMSPID_FILE
fi
echo -n $"$WMSBASE_NAME: starting"
#$AMAZONEC2_INSTALL_SCRIPT
$WMSDAEMON_CMD $WMSCONFIG_SCRIPT $WMSPID_FILE start >/dev/null 2>&1 &
success "$WMSBASE_NAME startup"
echo
touch $WMSLOCK_FILE
return 0
}
stop() {
if [ -f $WMSPID_FILE ]; then
	echo -n $"$WMSBASE_NAME: stopping"
	read kpid < $WMSPID_FILE
	$WMSDAEMON_CMD $WMSCONFIG_SCRIPT $WMSPID_FILE stop >/dev/null 2>&1 &
	let kwait=$SHUTDOWN_WAIT
	count=0;
	until [ `ps -p $kpid | grep -c $kpid` = '0' ] || [ $count -gt $kwait ]
	do
		echo -n -e "\nwaiting for processes to exit";
		sleep 1
		let count=$count+1;
	done
	if [ $count -gt $kwait ]; then
		echo -n -e "\nkilling processes which didn't stop after $SHUTDOWN_WAIT seconds"
		kill -9 $kpid
	fi
	rm -f $WMSPID_FILE
	success "$WMSBASE_NAME shutdown"
else
	echo -n $"$WMSBASE_NAME: not running"
fi
echo
rm -f $WMSLOCK_FILE
return 0
}
localstatus() {
if [ -f $WMSLOCK_FILE ]; then
	echo "$WMSBASE_NAME started"
else
	echo "$WMSBASE_NAME stopped"
fi
RETVAL=0
}
# See how we were called.
case "$WMCOMMAND" in
start)
start
;;
stop)
stop
;;
status)
localstatus
;;
restart)
stop
start
;;
*)
echo $"Usage: $WMSBASE_NAME {start|stop|restart|status}"
exit 1
esac
exit $RETVAL


This script accepts a call ’ /etc/init.d/WowzaMediaServer stop’ to stop the server.

When I am logged into Linux this works with no problem.

However, when I use the PHP exec() function to STOP the server with the same script, I get the following response:

[1] => ERROR: Missing license file: (/usr/local/WowzaMediaServer/conf/Server.license)

[2] => You must first run Wowza Media Server 3 in

[3] => standalone mode to enter serial number. Execute the

[4] => following commands to run in standalone mode:

[5] =>

[6] => cd /usr/local/WowzaMediaServer

[7] => ./startup.sh

I’m not sure why I am getting this response when I attempt to STOP the server. I’ve only ever seen it when I attempted to start the server without the license file.

Any ideas why executing the same call to stop the server would work when I’m logged into Linux but not from my PHP script?

Is this the best way to start/stop/restart Wowza or is there a better way?

take care,

lee

Hi,

When running PHP not all environment variables are set or available. As PHP within a Web server, its not clear if this is your situation, will run with no privs then this might also be an issue.

A more secure way to do this would be to have a crontab under root watching for a file placed by PHP which then executes based on the contents of the file. That way you do not have to give PHP root privs (which is dangerous).

Andrew.

Hi,

When running PHP not all environment variables are set or available. As PHP within a Web server, its not clear if this is your situation, will run with no privs then this might also be an issue.

A more secure way to do this would be to have a crontab under root watching for a file placed by PHP which then executes based on the contents of the file. That way you do not have to give PHP root privs (which is dangerous).

Andrew.

Hi

what do you recommend for a similar task in Windows? I mean starting “Wowza Media Server” from a remote Window machine using perl or php.