Gerenciando instância PHP com shell-script

Alan Victor Sexta, 19 de Dezembro de 2014


O PHP na versão 5.3 ou superior, possui uma instância web para levantar uma aplicação sem a necessidade de um servidor web como apache, dependendo da aplicação é interessante o uso dessa instância.

Resolvi escrever um shell script simples para gerenciar essa instancia. A importancia desse script é para que estudantes e profissionais de TI percebam as possibilidades da programação shell.

O esquema possui 2 arquivos, o script e um arquivo de configuração depois de instalado. Para instalar, baixe a source do script, desempacote e rode a opção install, ou seja, phpwebserver install, será instalado o script em /etc/phpwebserver, o arquivo de configuração em /etc/phpwebserver.conf, e o arquivo de log em /var/log/phpwebserver.log.

O Script

#!/bin/bash
# PHPwebserver
# Alan Victor M. Leite
#
 
temphp=$(which php5)
null=/dev/null
pidfile=/tmp/phpwebserver.pid
. /etc/phpwebserver/phpwebserver.conf &> $null
 
if [[ $1 != 'install' ]] ; then
	[ -d /etc/phpwebserver -a -e /etc/phpwebserver/phpwebserver -a -e /etc/phpwebserver/phpwebserver.conf ] || { echo "PHPwebserver not installed!, use: phpwebserver install" ; exit 1 ; }
	[ -z "$temphp" ] && { echo "PHP5 not installed!" ; exit 1 ; }
	[ -z "$host" ] && { echo "Host not configured!" ; exit 1 ; }
	[ -z "$webroot" ] && { echo "Web directory not configured!" ; exit 1 ; }
	[ -z "$port" ] && { echo "Port not configured!" ; exit 1 ; }
	[ -z "$logfile" ] && { echo "Log file not configured!" ; exit 1 ; }
fi
 
case $1 in
 
	start)
 
		if [ -e $pidfile ] ; then
			echo "PID file exists! PHPwebserver are running!, use phpwebserver restart"
			exit 1
		fi
 
		sleep 0.5
		oldpwd=$(pwd) ; cd $webroot
		$temphp -S ${host}:${port} &>> $logfile &
		echo "$!" > $pidfile
		cd $oldpwd
 
		if [ -e $pidfile ] ; then
			echo "PHPwebserver started!"
		else
			echo "ERRO Not possible create PID file the process!"
			exit 1
		fi
	;;
 
	stop)
		sleep 0.5
		if [ -e $pidfile ] ; then
			kill -9 $(cat $pidfile) &> $null
			rm -f $pidfile
		fi
 
		if [ ! -e $pidfile ] ; then
			echo "PHPwebserver stoped!"
		else
			echo "ERRO PID file exists!"
			exit 1
		fi
	;;
 
	restart)
		phpwebserver stop
		sleep 0.5
		phpwebserver start
 
	;;
 
	install)
		[ -d /etc/phpwebserver -a -e /etc/phpwebserver/phpwebserver -a -e /etc/phpwebserver/phpwebserver.conf ] && { echo "PHPwebserver old installed!" ; exit 1 ; } || 
		read -p "PHPwebserver NOT installed!, lets go install? (S/n): " sn
			[ -z $sn ] && sn=s
			case $sn in
				s)
					mkdir /etc/phpwebserver &> $null
					echo "
					# Configuration file of phpwebserver
 
					# Host server, defaul localhost
					host=localhost
 
					# Web server directory, default /var/www
					webroot=/var/www
 
					# Port listen, default 8090
					port=8090
 
					# Log file, no modify
					logfile=/var/log/phpwebserver.log
					" | sed 's/^s+//' > /etc/phpwebserver/phpwebserver.conf
					cp $(pwd)/phpwebserver /etc/phpwebserver/ && chmod +x /etc/phpwebserver/*
					ln -s /etc/phpwebserver/phpwebserver /usr/local/bin/phpwebserver
					[ -d /etc/phpwebserver -a -e /etc/phpwebserver/phpwebserver -a -e /etc/phpwebserver/phpwebserver.conf ] && { echo "PHPwebserver installed!!" ; exit 1 ; }
				;;
				n)
					echo "Exit of instalation!"
				;;
				*)
					echo "Invalid Option"
			esac
	;;
 
	*)
		echo "Invalid Option, Use: phpwebserver {start,stop,restart}"
esac

Espero que o script sirva de alguma forma para você leitor do meu blog! Se você não é desenvolvedor web ou algo do tipo, mas apenas gosta de linux e shell, o script é de extrema importância para a percepção de formas de uso da programação shell. Vlw!