#!/bin/sh

# 编译安装管理PHP

App=php

AppName=PHP

AppBase=/App

AppDir=$AppBase/$App

AppProg=$AppDir/sbin/php-fpm

AppIni=$AppDir/etc/php.ini

AppConf=$AppDir/etc/php-fpm.conf

ExtensionDir=$($AppDir/bin/php-config --extension-dir)

AppSrcBase=/App/src

AppSrcFile=$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=0

InstallFlag=0

# 获取PID

fpid()

{

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

源码安装的php如何启动脚本,PHP源码编译安装管理常用脚本相关推荐

  1. Centos7安装Python3并更改默认版本为python3(编译安装)

    Centos7安装Python3并更改默认版本为python3(编译安装) CentOS7自带的有python环境, 但是版本是2.7 查看Python的位置 [root@centos bin]# w ...

  2. MS SQL 日常维护管理常用脚本(二)

    下面是整理.收集监控数据库运行的一些常用脚本,也是MS SQL 日常维护管理常用脚本(一)的续集,欢迎大家补充.提意见. 查看数据库登录名信息 Code Snippet SELECT name     ...

  3. mysql5.5编译安装脚本_mysql5.5 免编译安装及脚本启动报错深入

    Mysql安装环境简介: 最近在做MHA.已经安装完毕heartbeat和drbd,现在准备安装Mysql. Mysql安装目录:/opt/mysql Mysql数据目录:/data/mysql 备注 ...

  4. mysql 安装dso命令_使用tengine DSO 来动态编译安装第三方模块(Lua

    在使用nginx时,需要增加或者改动一个模块,都需要重新编译nginx文件.最近使用了tengine,它提供的DSO工具来动态加载模块.本例测试需要动态增加lua-nginx模块,记录一下安装过程. ...

  5. tfs 安装mysql.h_如何在centos5或centos7上编译安装tfs rcserver 模块?

    已在docker centos7上成功编译rcserver模块,具体步骤如下: docker run -ti tfs:latest /bin/bash 1.进入到rcserver模块目录 cd /mn ...

  6. mysql 5.6.23 源码包安装报错_大环境下MySQL5.6源码安装实战一步步教你 CentOS6.5_64bit下编译安装...

    一.关闭防火墙 chkconfig iptables off service iptables stop 二.检查操作系统上是否安装了MySQL [[email protected] backup]# ...

  7. 安装错误 服务尚未启动_原创 | 西门子300软件安装出错处理大全

    每天解答学员问题中,好多学员经常都会问到西门子S7-300编程软件的安装以及软件安装出错的问题,因此收集了这些最常见的问题,以及对应的解决方法,希望对大家有所帮助! 一.西门子300 SMART软件安 ...

  8. apache 编译php mysql_记一次痛苦的过程-------源码编译安装apache+php5+mysql

    当时有我们准备做一个项目,于是我就自己搭建了lamp服务器,直接yum install所有文件,因为centos是一个比较稳重的系统,所以它上面所有软件都不是最新的,apache是2.2.15版本,p ...

  9. 源码编译安装httpd服务

    1 概述 很多软件没有发布rpm包,而是直接发布了源码,好处是这样能兼容更多的平台,但是,用户需要对源码进行编译后安装.利用工具make将源码生成二进制文件. 本文主要讲解了对httpd进行编译安装. ...

最新文章

  1. 【机器视觉案例】(5) AI视觉,手势调节物体尺寸,附python完整代码
  2. python数据分析的主要流程-python数据挖掘的基本流程有哪些?
  3. OpenGL Distance Field文本的实例
  4. Winform将网页生成图片
  5. Power BI新主页将使内容的导航和发现变得轻而易举!
  6. javascript笔记整理(对象基础)
  7. 【Spring】Spring 中的bean 和我们java中的bean有什么区别以及spring 模拟实现
  8. [Ext JS 4] 实战之 带week(星期)的日期选择控件
  9. Tensorflow高级封装
  10. FFMPEG结构体分析:AVCodecContext
  11. 最小生成树(Prim算法+Kruskal算法)
  12. 引用类型-Function类型
  13. 推荐系统矩阵分解详解之spark ALS
  14. nokia n9 android 4.4,NOKIA N9获APK兼容层 可安装Android应用
  15. 基本的广告法违禁词、违规词以及敏感词大全
  16. FreePiano下载与使用
  17. Matlba实现傅里叶变换及其逆变换
  18. html5 06携程网案例、 全屏插件的使用
  19. 已知一个字典包含若干员工信息,姓请编写一个函数,删除性别为男的员工信息
  20. 一个父亲对新婚女儿的自白

热门文章

  1. UNP Chapter 22 - 信号驱动I/O
  2. [MySQL] - 返回影响行数
  3. asp.net如何生成图片验证码
  4. hexo 环境变量_小白使用 Github + Hexo 从 0 搭建一个博客
  5. apache 修改服务器配置,Apache服务器配置全攻略
  6. 多线程创建方式 线程池、Future和CompletableFuture
  7. 4 微信公众号开发 被动回复消息 回复没有反应怎么办
  8. 线程打印状态_Java线程状态的转换
  9. beetl 取list下标的问题
  10. 优化JS代码的34种方法(上)