#!/bin/sh# 编译安装管理phpapp=phpappname=phpappbase=/appappdir=$appbase/$appappprog=$appdir/sbin/php-fpmappini=$appdir/etc/php.iniappconf=$appdir/etc/php-fpm.confextensiondir=$($appdir/bin/php-config --extension-dir)appsrcbase=/app/srcappsrcfile=$app-*.tar.*appsrcdir=$(find $appsrcbase -maxdepth 1 -name $appsrcfile -type f 2> /dev/null | sed -e 's/.tar.*$//' -e 's/^.\///')appuser=$(grep ^[[:space:]]*user $appconf 2> /dev/null | awk -f= '{print $2}' | sed -e 's/[[:space:]]//g' -e 's///g' -e s/'//g)appgroup=$(grep ^[[:space:]]*group $appconf 2> /dev/null | awk -f= '{print $2}' | sed -e 's/[[:space:]]//g' -e 's///g' -e s/'//g)apppiddir=$(dirname $(grep ^[[:space:]]*pid $appconf 2> /dev/null | awk -f= '{print $2}' | sed -e 's/[[:space:]]//g' -e 's///g' -e s/'//g) 2> /dev/null)apperrorlogdir=$(dirname $(grep ^[[:space:]]*error_log $appconf 2> /dev/null | awk -f= '{print $2}' | sed -e 's/[[:space:]]//g' -e 's///g' -e s/'//g) 2> /dev/null)appslowlogdir=$(dirname $(grep ^[[:space:]]*slowlog $appconf 2> /dev/null | awk -f= '{print $2}' | sed -e 's/[[:space:]]//g' -e 's///g' -e s/'//g) 2> /dev/null)uploadtmpdir=$(grep ^[[:space:]]*upload_tmp_dir $appini 2> /dev/null | awk -f= '{print $2}' | sed -e 's/[[:space:]]//g' -e 's///g' -e s/'//g)grep ^session.save_handler $appini 2> /dev/null | grep -q files[ $? -eq 0 ] && sessiondir=$(grep ^[[:space:]]*session.save_path $appini 2> /dev/null | awk -f= '{print $2}' | sed -e 's/[[:space:]]//g' -e 's///g' -e s/'//g)cachedir=$(grep ^[[:space:]]*eaccelerator.cache_dir $appini 2> /dev/null | awk -f= '{print $2}' | sed -e 's/[[:space:]]//g' -e 's///g' -e s/'//g)appuser=${appuser:-nobody}appgroup=${appgroup:-nobody}apppiddir=${apppiddir:=$appdir/var/run}apperrorlogdir=${apperrorlogdir:-$appdir/var/log}appslowlogdir=${appslowlogdir:-$appdir/var/log}removeflag=0installflag=0# 获取pidfpid(){ appmasterpid=$(ps ax | grep php-fpm: master process | grep -v grep | awk '{print $1}' 2> /dev/null) appworkerpid=$(ps ax | grep php-fpm: pool | grep -v grep | awk '{print $1}' 2> /dev/null)}# 查询状态fstatus(){ fpid if [ ! -f $appprog ]; then echo $appname 未安装 else echo $appname 已安装 if [ -z $appmasterpid ]; then echo $appname 未启动 else echo $appname 正在运行 fi fi}# 删除fremove(){ fpid removeflag=1 if [ -z $appmasterpid ]; then if [ -d $appdir ]; then rm -rf $appdir && echo 删除 $appname else echo $appname 未安装 fi else echo $appname 正在运行 && exit fi}# 备份fbackup(){ day=$(date +%y-%m-%d) backupfile=$app.$day.tgz if [ -f $appprog ]; then cd $appbase tar zcvf $backupfile --exclude=var/log/* --exclude=var/run/* $app --backup=numbered [ $? -eq 0 ] && echo $appname 备份成功 || echo $appname 备份失败 else echo $appname 未安装 fi}# 安装finstall(){ fpid installflag=1 if [ -z $appmasterpid ]; then test -f $appprog && echo $appname 已安装 [ $? -ne 0 ] && fupdate && fcpconf else echo $appname 正在运行 fi}# 拷贝配置fcpconf(){ cp -vf --backup=numbered $scriptdir/php.ini $appini cp -vf --backup=numbered $scriptdir/php-fpm.conf $appconf}# 更新fupdate(){ operate=更新 [ $installflag -eq 1 ] && operate=安装 [ $removeflag -ne 1 ] && fbackup cd $appsrcbase test -d $appsrcdir && rm -rf $appsrcdir tar jxf $appsrcfile || tar jxf $appsrcfile || tar zxf $appsrcfile cd $appsrcdir ./configure \ --prefix=$appdir \ --disable-all \ --enable-fpm \ --enable-opcache \ --enable-pdo \ --enable-session \ --with-pcre-dir \ --with-pdo-mysql=mysqlnd [ $? -eq 0 ] && make && make install if [ $? -eq 0 ];then echo $appname $operate成功 else echo $appname $operate失败 exit 1 fi}# 初始化finit(){ echo 初始化 $appname id -gn $appgroup &> /dev/null if [ $? -ne 0 ]; then groupadd $appgroup && echo 新建 $appname 运行组:$appgroup else echo $appname 运行组:$appgroup 已存在 fi id -un $appuser &> /dev/null if [ $? -ne 0 ]; then useradd -s /bin/false -g $appgroup -m $appuser if [ $? -eq 0 ]; then echo 新建 $appname 运行用户:$appuser echo s0ngphb693$ | passwd --stdin $appuser &> /dev/null fi else echo $appname 运行用户:$appuser 已存在 fi echo $apppiddir | grep -q ^/ if [ $? -eq 1 ]; then apppiddir=$appdir/var/$apppiddir fi if [ ! -e $apppiddir ]; then mkdir -p $apppiddir && echo 新建 $appname pid文件存放目录:$apppiddir else echo $appname pid文件存放目录:$apppiddir 已存在 fi echo $apperrorlogdir | grep -q ^/ if [ $? -eq 1 ]; then apperrorlogdir=$appdir/var/$apperrorlogdir fi if [ ! -e $apperrorlogdir ]; then mkdir -p $apperrorlogdir && echo 新建 $appname 错误日志目录:$apperrorlogdir else echo $apperrorlogdir 错误日志目录:$apperrorlogdir 已存在 fi echo $appslowlogdir | grep -q ^/ if [ $? -eq 1 ]; then appslowlogdir=$appdir/$appslowlogdir fi if [ ! -e $appslowlogdir ]; then mkdir -p $appslowlogdir && echo 新建 $appname 慢日志目录:$appslowlogdir else echo $appslowlogdir 慢日志目录:$appslowlogdir 已存在 fi printf \n if [ -n $uploadtmpdir ]; then echo $uploadtmpdir | grep -q ^/ if [ $? -eq 0 ]; then if [ ! -e $uploadtmpdir ]; then mkdir -p $uploadtmpdir && echo 新建 $appname 文件上传临时存储目录:$uploadtmpdir else echo $appname 文件上传临时存储目录:$uploadtmpdir 已存在 fi chown -r $appuser:$appgroup $uploadtmpdir && echo 修改 $appname 文件上传临时存储目录拥有者为 $appuser,属组为 $appgroup printf \n fi fi if [ -n $sessiondir ]; then echo $sessiondir | grep -q ^/ if [ $? -eq 0 ]; then if [ ! -e $sessiondir ]; then mkdir -p $sessiondir && echo 新建 $appname 会话存储目录:$sessiondir else echo $appname 会话存储目录:$sessiondir 已存在 fi chown -r $appuser:$appgroup $sessiondir && echo 修改 $appname 会话存储目录拥有者为 $appuser,属组为 $appgroup printf \n fi fi if [ -n $cachedir ]; then echo $cachedir | grep -q ^/ if [ $? -eq 0 ]; then if [ ! -e $cachedir ]; then mkdir -p $cachedir && echo 新建 eaccelerator 缓存目录:$cachedir else echo eaccelerator 缓存目录:$cachedir 已存在 fi chown -r $appuser:$appgroup $cachedir && echo 修改 eaccelerator 缓存目录拥有者为 $appuser,属组为 $appgroup fi fi sed -i s|extension_dir.*$|extension_dir = \$extensiondir\| $appini}# 检查配置ftest(){ $appprog -t && echo $appname 配置正确 || echo $appname 配置错误}# 启动fstart(){ fpid if [ -n $appmasterpid ]; then echo $appname 正在运行 else $appprog -c $appini && echo 启动 $appname || echo $appname 启动失败 fi}# 停止fstop(){ fpid if [ -n $appmasterpid ]; then kill -int $appmasterpid && echo 停止 $appname || echo $appname 停止失败 else echo $appname 未启动 fi}# 重载配置freload(){ fpid if [ -n $appmasterpid ]; then kill -usr2 $appmasterpid && echo 重载 $appname 配置 || echo $appname 重载配置失败 else echo $appname 未启动 fi}# 重启frestart(){ fpid [ -n $appmasterpid ] && fstop && sleep 1 fstart}# 终止进程fkill(){ fpid if [ -n $appmasterpid ]; then echo $appmasterpid | xargs kill -9 if [ $? -eq 0 ]; then echo 终止 $appname 主进程 else echo 终止 $appname 主进程失败 fi else echo $appname 主进程未运行 fi if [ -n $appworkerpid ]; then echo $appworkerpid | xargs kill -9 if [ $? -eq 0 ]; then echo 终止 $appname 工作进程 else echo 终止 $appname 工作进程失败 fi else echo $appname 工作进程未运行 fi}scriptdir=$(cd $(dirname $0); pwd)scriptfile=$(basename $0)case $1 in install ) finstall;; update ) fupdate;; reinstall ) fremove && finstall;; remove ) fremove;; backup ) fbackup;; init ) finit;; start ) fstart;; stop ) fstop;; restart ) frestart;; status ) fstatus;; cpconf ) fcpconf;; test ) ftest;; reload ) freload;; kill ) fkill;; * ) echo $scriptfile install 安装 $appname echo $scriptfile update 更新 $appname echo $scriptfile reinstall 重装 $appname echo $scriptfile remove 删除 $appname echo $scriptfile backup 备份 $appname echo $scriptfile init 初始化 $appname echo $scriptfile start 启动 $appname echo $scriptfile stop 停止 $appname echo $scriptfile restart 重启 $appname echo $scriptfile status 查询 $appname 状态 echo $scriptfile cpconf 拷贝 $appname 配置 echo $scriptfile test 检查 $appname 配置 echo $scriptfile reload 重载 $appname 配置 echo $scriptfile kill 终止 $appname 进程 ;;esac