mirror of https://github.com/midoks/mdserver-web
parent
bd615b4ea4
commit
fc21b4966a
@ -1,118 +0,0 @@ |
|||||||
#! /bin/sh |
|
||||||
# chkconfig: 2345 55 25 |
|
||||||
# Description: Startup script for nginx webserver on Debian. Place in /etc/init.d and |
|
||||||
# run 'update-rc.d -f nginx defaults', or use the appropriate command on your |
|
||||||
# distro. For CentOS/Redhat run: 'chkconfig --add openresty' |
|
||||||
|
|
||||||
### BEGIN INIT INFO |
|
||||||
# Provides: nginx |
|
||||||
# Required-Start: $all |
|
||||||
# Required-Stop: $all |
|
||||||
# Default-Start: 2 3 4 5 |
|
||||||
# Default-Stop: 0 1 6 |
|
||||||
# Short-Description: starts the nginx web server |
|
||||||
# Description: starts nginx using start-stop-daemon |
|
||||||
### END INIT INFO |
|
||||||
|
|
||||||
|
|
||||||
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin |
|
||||||
NAME=nginx |
|
||||||
NGINX_BIN={$SERVER_PATH}/openresty/bin/openresty |
|
||||||
CONFIGFILE={$SERVER_PATH}/openresty/nginx/conf/$NAME.conf |
|
||||||
PIDFILE={$SERVER_PATH}/openresty/nginx/logs/$NAME.pid |
|
||||||
|
|
||||||
case "$1" in |
|
||||||
start) |
|
||||||
echo -n "Starting $NAME... " |
|
||||||
if [ -f $PIDFILE ];then |
|
||||||
mPID=`cat $PIDFILE` |
|
||||||
isStart=`ps ax | awk '{ print $1 }' | grep -e "^${mPID}$"` |
|
||||||
if [ "$isStart" != '' ];then |
|
||||||
echo "$NAME (pid `pidof $NAME`) already running." |
|
||||||
exit 1 |
|
||||||
fi |
|
||||||
fi |
|
||||||
|
|
||||||
$NGINX_BIN -c $CONFIGFILE |
|
||||||
|
|
||||||
if [ "$?" != 0 ] ; then |
|
||||||
echo " failed" |
|
||||||
exit 1 |
|
||||||
else |
|
||||||
echo " done" |
|
||||||
fi |
|
||||||
;; |
|
||||||
|
|
||||||
stop) |
|
||||||
echo -n "Stoping $NAME... " |
|
||||||
if [ -f $PIDFILE ];then |
|
||||||
mPID=`cat $PIDFILE` |
|
||||||
isStart=`ps ax | awk '{ print $1 }' | grep -e "^${mPID}$"` |
|
||||||
if [ "$isStart" = '' ];then |
|
||||||
echo "$NAME is not running." |
|
||||||
exit 1 |
|
||||||
fi |
|
||||||
else |
|
||||||
echo "$NAME is not running." |
|
||||||
exit 1 |
|
||||||
fi |
|
||||||
$NGINX_BIN -s stop |
|
||||||
|
|
||||||
if [ "$?" != 0 ] ; then |
|
||||||
echo " failed. Use force-quit" |
|
||||||
exit 1 |
|
||||||
else |
|
||||||
echo " done" |
|
||||||
fi |
|
||||||
;; |
|
||||||
|
|
||||||
status) |
|
||||||
if [ -f $PIDFILE ];then |
|
||||||
mPID=`cat $PIDFILE` |
|
||||||
isStart=`ps ax | awk '{ print $1 }' | grep -e "^${mPID}$"` |
|
||||||
if [ "$isStart" != '' ];then |
|
||||||
echo "$NAME (pid `pidof $NAME`) already running." |
|
||||||
exit 1 |
|
||||||
else |
|
||||||
echo "$NAME is stopped" |
|
||||||
exit 0 |
|
||||||
fi |
|
||||||
else |
|
||||||
echo "$NAME is stopped" |
|
||||||
exit 0 |
|
||||||
fi |
|
||||||
;; |
|
||||||
restart) |
|
||||||
$0 stop |
|
||||||
sleep 1 |
|
||||||
$0 start |
|
||||||
;; |
|
||||||
|
|
||||||
reload) |
|
||||||
echo -n "Reload service $NAME... " |
|
||||||
if [ -f $PIDFILE ];then |
|
||||||
mPID=`cat $PIDFILE` |
|
||||||
isStart=`ps ax | awk '{ print $1 }' | grep -e "^${mPID}$"` |
|
||||||
if [ "$isStart" != '' ];then |
|
||||||
$NGINX_BIN -s reload |
|
||||||
echo " done" |
|
||||||
else |
|
||||||
echo "$NAME is not running, can't reload." |
|
||||||
exit 1 |
|
||||||
fi |
|
||||||
else |
|
||||||
echo "$NAME is not running, can't reload." |
|
||||||
exit 1 |
|
||||||
fi |
|
||||||
;; |
|
||||||
|
|
||||||
configtest) |
|
||||||
echo -n "Test $NAME configure files... " |
|
||||||
$NGINX_BIN -t |
|
||||||
;; |
|
||||||
|
|
||||||
*) |
|
||||||
echo "Usage: $0 {start|stop|restart|reload|status|configtest}" |
|
||||||
exit 1 |
|
||||||
;; |
|
||||||
esac |
|
@ -0,0 +1,725 @@ |
|||||||
|
# coding:utf-8 |
||||||
|
|
||||||
|
import sys |
||||||
|
import io |
||||||
|
import os |
||||||
|
import time |
||||||
|
import re |
||||||
|
import json |
||||||
|
import shutil |
||||||
|
|
||||||
|
# reload(sys) |
||||||
|
# sys.setdefaultencoding('utf8') |
||||||
|
|
||||||
|
sys.path.append(os.getcwd() + "/class/core") |
||||||
|
# sys.path.append("/usr/local/lib/python3.6/site-packages") |
||||||
|
|
||||||
|
import mw |
||||||
|
|
||||||
|
if mw.isAppleSystem(): |
||||||
|
cmd = 'ls /usr/local/lib/ | grep python | cut -d \\ -f 1 | awk \'END {print}\'' |
||||||
|
info = mw.execShell(cmd) |
||||||
|
p = "/usr/local/lib/" + info[0].strip() + "/site-packages" |
||||||
|
sys.path.append(p) |
||||||
|
|
||||||
|
app_debug = False |
||||||
|
if mw.isAppleSystem(): |
||||||
|
app_debug = True |
||||||
|
|
||||||
|
|
||||||
|
def getPluginName(): |
||||||
|
return 'php' |
||||||
|
|
||||||
|
|
||||||
|
def getPluginDir(): |
||||||
|
return mw.getPluginDir() + '/' + getPluginName() |
||||||
|
|
||||||
|
|
||||||
|
def getServerDir(): |
||||||
|
return mw.getServerDir() + '/' + getPluginName() |
||||||
|
|
||||||
|
|
||||||
|
def getInitDFile(version): |
||||||
|
if app_debug: |
||||||
|
return '/tmp/' + getPluginName() |
||||||
|
return '/etc/init.d/' + getPluginName() + version |
||||||
|
|
||||||
|
|
||||||
|
def getArgs(): |
||||||
|
args = sys.argv[3:] |
||||||
|
tmp = {} |
||||||
|
args_len = len(args) |
||||||
|
|
||||||
|
if args_len == 1: |
||||||
|
t = args[0].strip('{').strip('}') |
||||||
|
t = t.split(':') |
||||||
|
tmp[t[0]] = t[1] |
||||||
|
elif args_len > 1: |
||||||
|
for i in range(len(args)): |
||||||
|
t = args[i].split(':') |
||||||
|
tmp[t[0]] = t[1] |
||||||
|
|
||||||
|
return tmp |
||||||
|
|
||||||
|
|
||||||
|
def checkArgs(data, ck=[]): |
||||||
|
for i in range(len(ck)): |
||||||
|
if not ck[i] in data: |
||||||
|
return (False, mw.returnJson(False, '参数:(' + ck[i] + ')没有!')) |
||||||
|
return (True, mw.returnJson(True, 'ok')) |
||||||
|
|
||||||
|
|
||||||
|
def getConf(version): |
||||||
|
path = getServerDir() + '/' + version + '/etc/php.ini' |
||||||
|
return path |
||||||
|
|
||||||
|
|
||||||
|
def status(version): |
||||||
|
cmd = "ps -ef|grep 'php/" + version + \ |
||||||
|
"' |grep -v grep | grep -v python | awk '{print $2}'" |
||||||
|
data = mw.execShell(cmd) |
||||||
|
if data[0] == '': |
||||||
|
return 'stop' |
||||||
|
return 'start' |
||||||
|
|
||||||
|
|
||||||
|
def contentReplace(content, version): |
||||||
|
service_path = mw.getServerDir() |
||||||
|
content = content.replace('{$ROOT_PATH}', mw.getRootDir()) |
||||||
|
content = content.replace('{$SERVER_PATH}', service_path) |
||||||
|
content = content.replace('{$PHP_VERSION}', version) |
||||||
|
content = content.replace('{$LOCAL_IP}', mw.getLocalIp()) |
||||||
|
|
||||||
|
if mw.isAppleSystem(): |
||||||
|
# user = mw.execShell( |
||||||
|
# "who | sed -n '2, 1p' |awk '{print $1}'")[0].strip() |
||||||
|
content = content.replace('{$PHP_USER}', 'nobody') |
||||||
|
content = content.replace('{$PHP_GROUP}', 'nobody') |
||||||
|
|
||||||
|
rep = 'listen.owner\s*=\s*(.+)\r?\n' |
||||||
|
val = ';listen.owner = nobody\n' |
||||||
|
content = re.sub(rep, val, content) |
||||||
|
|
||||||
|
rep = 'listen.group\s*=\s*(.+)\r?\n' |
||||||
|
val = ';listen.group = nobody\n' |
||||||
|
content = re.sub(rep, val, content) |
||||||
|
|
||||||
|
rep = 'user\s*=\s*(.+)\r?\n' |
||||||
|
val = ';user = nobody\n' |
||||||
|
content = re.sub(rep, val, content) |
||||||
|
|
||||||
|
rep = r'[^\.]group\s*=\s*(.+)\r?\n' |
||||||
|
val = ';group = nobody\n' |
||||||
|
content = re.sub(rep, val, content) |
||||||
|
|
||||||
|
else: |
||||||
|
content = content.replace('{$PHP_USER}', 'www') |
||||||
|
content = content.replace('{$PHP_GROUP}', 'www') |
||||||
|
return content |
||||||
|
|
||||||
|
|
||||||
|
def makeOpenrestyConf(): |
||||||
|
phpversions = ['00', '52', '53', '54', '55', '56', |
||||||
|
'70', '71', '72', '73', '74', '80', '81'] |
||||||
|
if mw.isInstalledWeb(): |
||||||
|
sdir = mw.getServerDir() |
||||||
|
d_pathinfo = sdir + '/openresty/nginx/conf/pathinfo.conf' |
||||||
|
if not os.path.exists(d_pathinfo): |
||||||
|
s_pathinfo = getPluginDir() + '/conf/pathinfo.conf' |
||||||
|
shutil.copyfile(s_pathinfo, d_pathinfo) |
||||||
|
|
||||||
|
info = getPluginDir() + '/info.json' |
||||||
|
content = mw.readFile(info) |
||||||
|
content = json.loads(content) |
||||||
|
versions = content['versions'] |
||||||
|
tpl = getPluginDir() + '/conf/enable-php.conf' |
||||||
|
tpl_content = mw.readFile(tpl) |
||||||
|
for x in phpversions: |
||||||
|
dfile = sdir + '/openresty/nginx/conf/enable-php-' + x + '.conf' |
||||||
|
if not os.path.exists(dfile): |
||||||
|
if x == '00': |
||||||
|
mw.writeFile(dfile, '') |
||||||
|
else: |
||||||
|
w_content = contentReplace(tpl_content, x) |
||||||
|
mw.writeFile(dfile, w_content) |
||||||
|
|
||||||
|
# php-fpm status |
||||||
|
for version in phpversions: |
||||||
|
dfile = sdir + '/openresty/nginx/conf/php_status/phpfpm_status_' + version + '.conf' |
||||||
|
tpl = getPluginDir() + '/conf/phpfpm_status.conf' |
||||||
|
if not os.path.exists(dfile): |
||||||
|
content = mw.readFile(tpl) |
||||||
|
content = contentReplace(content, version) |
||||||
|
mw.writeFile(dfile, content) |
||||||
|
mw.restartWeb() |
||||||
|
|
||||||
|
|
||||||
|
def phpPrependFile(version): |
||||||
|
app_start = getServerDir() + '/app_start.php' |
||||||
|
if not os.path.exists(app_start): |
||||||
|
tpl = getPluginDir() + '/conf/app_start.php' |
||||||
|
content = mw.readFile(tpl) |
||||||
|
content = contentReplace(content, version) |
||||||
|
mw.writeFile(app_start, content) |
||||||
|
|
||||||
|
|
||||||
|
def phpFpmReplace(version): |
||||||
|
desc_php_fpm = getServerDir() + '/' + version + '/etc/php-fpm.conf' |
||||||
|
if not os.path.exists(desc_php_fpm): |
||||||
|
tpl_php_fpm = getPluginDir() + '/conf/php-fpm.conf' |
||||||
|
content = mw.readFile(tpl_php_fpm) |
||||||
|
content = contentReplace(content, version) |
||||||
|
mw.writeFile(desc_php_fpm, content) |
||||||
|
else: |
||||||
|
if version == '52': |
||||||
|
tpl_php_fpm = tpl_php_fpm = getPluginDir() + '/conf/php-fpm-52.conf' |
||||||
|
content = mw.readFile(tpl_php_fpm) |
||||||
|
mw.writeFile(desc_php_fpm, content) |
||||||
|
|
||||||
|
|
||||||
|
def phpFpmWwwReplace(version): |
||||||
|
service_php_fpm_dir = getServerDir() + '/' + version + '/etc/php-fpm.d/' |
||||||
|
|
||||||
|
if not os.path.exists(service_php_fpm_dir): |
||||||
|
os.mkdir(service_php_fpm_dir) |
||||||
|
|
||||||
|
service_php_fpmwww = service_php_fpm_dir + '/www.conf' |
||||||
|
if not os.path.exists(service_php_fpmwww): |
||||||
|
tpl_php_fpmwww = getPluginDir() + '/conf/www.conf' |
||||||
|
content = mw.readFile(tpl_php_fpmwww) |
||||||
|
content = contentReplace(content, version) |
||||||
|
mw.writeFile(service_php_fpmwww, content) |
||||||
|
|
||||||
|
|
||||||
|
def makePhpIni(version): |
||||||
|
d_ini = mw.getServerDir() + '/php/' + version + '/etc/php.ini' |
||||||
|
if not os.path.exists(d_ini): |
||||||
|
s_ini = getPluginDir() + '/conf/php' + version[0:1] + '.ini' |
||||||
|
# shutil.copyfile(s_ini, d_ini) |
||||||
|
content = mw.readFile(s_ini) |
||||||
|
if version == '52': |
||||||
|
content = content + "auto_prepend_file=/www/server/php/app_start.php" |
||||||
|
mw.writeFile(d_ini, content) |
||||||
|
|
||||||
|
|
||||||
|
def initReplace(version): |
||||||
|
makeOpenrestyConf() |
||||||
|
makePhpIni(version) |
||||||
|
|
||||||
|
initD_path = getServerDir() + '/init.d' |
||||||
|
if not os.path.exists(initD_path): |
||||||
|
os.mkdir(initD_path) |
||||||
|
|
||||||
|
file_bin = initD_path + '/php' + version |
||||||
|
if not os.path.exists(file_bin): |
||||||
|
file_tpl = getPluginDir() + '/init.d/php.tpl' |
||||||
|
|
||||||
|
if version == '52': |
||||||
|
file_tpl = getPluginDir() + '/init.d/php52.tpl' |
||||||
|
|
||||||
|
content = mw.readFile(file_tpl) |
||||||
|
content = contentReplace(content, version) |
||||||
|
|
||||||
|
mw.writeFile(file_bin, content) |
||||||
|
mw.execShell('chmod +x ' + file_bin) |
||||||
|
|
||||||
|
phpPrependFile(version) |
||||||
|
phpFpmWwwReplace(version) |
||||||
|
phpFpmReplace(version) |
||||||
|
|
||||||
|
session_path = '/tmp/session' |
||||||
|
if not os.path.exists(session_path): |
||||||
|
os.mkdir(session_path) |
||||||
|
if not mw.isAppleSystem(): |
||||||
|
mw.execShell('chown -R www:www ' + session_path) |
||||||
|
|
||||||
|
upload_path = '/tmp/upload' |
||||||
|
if not os.path.exists(upload_path): |
||||||
|
os.mkdir(upload_path) |
||||||
|
if not mw.isAppleSystem(): |
||||||
|
mw.execShell('chown -R www:www ' + upload_path) |
||||||
|
return file_bin |
||||||
|
|
||||||
|
|
||||||
|
def phpOp(version, method): |
||||||
|
file = initReplace(version) |
||||||
|
data = mw.execShell(file + ' ' + method) |
||||||
|
if data[1] == '': |
||||||
|
return 'ok' |
||||||
|
return data[1] |
||||||
|
|
||||||
|
|
||||||
|
def start(version): |
||||||
|
return phpOp(version, 'start') |
||||||
|
|
||||||
|
|
||||||
|
def stop(version): |
||||||
|
return phpOp(version, 'stop') |
||||||
|
|
||||||
|
|
||||||
|
def restart(version): |
||||||
|
return phpOp(version, 'restart') |
||||||
|
|
||||||
|
|
||||||
|
def reload(version): |
||||||
|
return phpOp(version, 'reload') |
||||||
|
|
||||||
|
|
||||||
|
def initdStatus(version): |
||||||
|
if not app_debug: |
||||||
|
if mw.isAppleSystem(): |
||||||
|
return "Apple Computer does not support" |
||||||
|
initd_bin = getInitDFile(version) |
||||||
|
if os.path.exists(initd_bin): |
||||||
|
return 'ok' |
||||||
|
return 'fail' |
||||||
|
|
||||||
|
|
||||||
|
def initdInstall(version): |
||||||
|
import shutil |
||||||
|
if not app_debug: |
||||||
|
if mw.isAppleSystem(): |
||||||
|
return "Apple Computer does not support" |
||||||
|
|
||||||
|
source_bin = initReplace(version) |
||||||
|
initd_bin = getInitDFile(version) |
||||||
|
shutil.copyfile(source_bin, initd_bin) |
||||||
|
mw.execShell('chmod +x ' + initd_bin) |
||||||
|
mw.execShell('chkconfig --add ' + getPluginName() + version) |
||||||
|
return 'ok' |
||||||
|
|
||||||
|
|
||||||
|
def initdUinstall(version): |
||||||
|
if not app_debug: |
||||||
|
if mw.isAppleSystem(): |
||||||
|
return "Apple Computer does not support" |
||||||
|
|
||||||
|
mw.execShell('chkconfig --del ' + getPluginName()) |
||||||
|
initd_bin = getInitDFile(version) |
||||||
|
os.remove(initd_bin) |
||||||
|
return 'ok' |
||||||
|
|
||||||
|
|
||||||
|
def fpmLog(version): |
||||||
|
return getServerDir() + '/' + version + '/var/log/php-fpm.log' |
||||||
|
|
||||||
|
|
||||||
|
def fpmSlowLog(version): |
||||||
|
return getServerDir() + '/' + version + '/var/log/www-slow.log' |
||||||
|
|
||||||
|
|
||||||
|
def getPhpConf(version): |
||||||
|
gets = [ |
||||||
|
{'name': 'short_open_tag', 'type': 1, 'ps': '短标签支持'}, |
||||||
|
{'name': 'asp_tags', 'type': 1, 'ps': 'ASP标签支持'}, |
||||||
|
{'name': 'max_execution_time', 'type': 2, 'ps': '最大脚本运行时间'}, |
||||||
|
{'name': 'max_input_time', 'type': 2, 'ps': '最大输入时间'}, |
||||||
|
{'name': 'max_input_var', 'type': 2, 'ps': '最大输入数量'}, |
||||||
|
{'name': 'memory_limit', 'type': 2, 'ps': '脚本内存限制'}, |
||||||
|
{'name': 'post_max_size', 'type': 2, 'ps': 'POST数据最大尺寸'}, |
||||||
|
{'name': 'file_uploads', 'type': 1, 'ps': '是否允许上传文件'}, |
||||||
|
{'name': 'upload_max_filesize', 'type': 2, 'ps': '允许上传文件的最大尺寸'}, |
||||||
|
{'name': 'max_file_uploads', 'type': 2, 'ps': '允许同时上传文件的最大数量'}, |
||||||
|
{'name': 'default_socket_timeout', 'type': 2, 'ps': 'Socket超时时间'}, |
||||||
|
{'name': 'error_reporting', 'type': 3, 'ps': '错误级别'}, |
||||||
|
{'name': 'display_errors', 'type': 1, 'ps': '是否输出详细错误信息'}, |
||||||
|
{'name': 'cgi.fix_pathinfo', 'type': 0, 'ps': '是否开启pathinfo'}, |
||||||
|
{'name': 'date.timezone', 'type': 3, 'ps': '时区'} |
||||||
|
] |
||||||
|
phpini = mw.readFile(getServerDir() + '/' + version + '/etc/php.ini') |
||||||
|
result = [] |
||||||
|
for g in gets: |
||||||
|
rep = g['name'] + '\s*=\s*([0-9A-Za-z_& ~]+)(\s*;?|\r?\n)' |
||||||
|
tmp = re.search(rep, phpini) |
||||||
|
if not tmp: |
||||||
|
continue |
||||||
|
g['value'] = tmp.groups()[0] |
||||||
|
result.append(g) |
||||||
|
return mw.getJson(result) |
||||||
|
|
||||||
|
|
||||||
|
def submitPhpConf(version): |
||||||
|
gets = ['display_errors', 'cgi.fix_pathinfo', 'date.timezone', 'short_open_tag', |
||||||
|
'asp_tags', 'max_execution_time', 'max_input_time', 'memory_limit', |
||||||
|
'post_max_size', 'file_uploads', 'upload_max_filesize', 'max_file_uploads', |
||||||
|
'default_socket_timeout', 'error_reporting'] |
||||||
|
args = getArgs() |
||||||
|
filename = getServerDir() + '/' + version + '/etc/php.ini' |
||||||
|
phpini = mw.readFile(filename) |
||||||
|
for g in gets: |
||||||
|
if g in args: |
||||||
|
rep = g + '\s*=\s*(.+)\r?\n' |
||||||
|
val = g + ' = ' + args[g] + '\n' |
||||||
|
phpini = re.sub(rep, val, phpini) |
||||||
|
mw.writeFile(filename, phpini) |
||||||
|
mw.execShell(getServerDir() + '/init.d/php' + version + ' reload') |
||||||
|
return mw.returnJson(True, '设置成功') |
||||||
|
|
||||||
|
|
||||||
|
def getLimitConf(version): |
||||||
|
fileini = getServerDir() + "/" + version + "/etc/php.ini" |
||||||
|
phpini = mw.readFile(fileini) |
||||||
|
filefpm = getServerDir() + "/" + version + "/etc/php-fpm.conf" |
||||||
|
phpfpm = mw.readFile(filefpm) |
||||||
|
|
||||||
|
# print fileini, filefpm |
||||||
|
data = {} |
||||||
|
try: |
||||||
|
rep = "upload_max_filesize\s*=\s*([0-9]+)M" |
||||||
|
tmp = re.search(rep, phpini).groups() |
||||||
|
data['max'] = tmp[0] |
||||||
|
except: |
||||||
|
data['max'] = '50' |
||||||
|
|
||||||
|
try: |
||||||
|
rep = "request_terminate_timeout\s*=\s*([0-9]+)\n" |
||||||
|
tmp = re.search(rep, phpfpm).groups() |
||||||
|
data['maxTime'] = tmp[0] |
||||||
|
except: |
||||||
|
data['maxTime'] = 0 |
||||||
|
|
||||||
|
try: |
||||||
|
rep = r"\n;*\s*cgi\.fix_pathinfo\s*=\s*([0-9]+)\s*\n" |
||||||
|
tmp = re.search(rep, phpini).groups() |
||||||
|
|
||||||
|
if tmp[0] == '1': |
||||||
|
data['pathinfo'] = True |
||||||
|
else: |
||||||
|
data['pathinfo'] = False |
||||||
|
except: |
||||||
|
data['pathinfo'] = False |
||||||
|
|
||||||
|
return mw.getJson(data) |
||||||
|
|
||||||
|
|
||||||
|
def setMaxTime(version): |
||||||
|
args = getArgs() |
||||||
|
data = checkArgs(args, ['time']) |
||||||
|
if not data[0]: |
||||||
|
return data[1] |
||||||
|
|
||||||
|
time = args['time'] |
||||||
|
if int(time) < 30 or int(time) > 86400: |
||||||
|
return mw.returnJson(False, '请填写30-86400间的值!') |
||||||
|
|
||||||
|
filefpm = getServerDir() + "/" + version + "/etc/php-fpm.conf" |
||||||
|
conf = mw.readFile(filefpm) |
||||||
|
rep = "request_terminate_timeout\s*=\s*([0-9]+)\n" |
||||||
|
conf = re.sub(rep, "request_terminate_timeout = " + time + "\n", conf) |
||||||
|
mw.writeFile(filefpm, conf) |
||||||
|
|
||||||
|
fileini = getServerDir() + "/" + version + "/etc/php.ini" |
||||||
|
phpini = mw.readFile(fileini) |
||||||
|
rep = "max_execution_time\s*=\s*([0-9]+)\r?\n" |
||||||
|
phpini = re.sub(rep, "max_execution_time = " + time + "\n", phpini) |
||||||
|
rep = "max_input_time\s*=\s*([0-9]+)\r?\n" |
||||||
|
phpini = re.sub(rep, "max_input_time = " + time + "\n", phpini) |
||||||
|
mw.writeFile(fileini, phpini) |
||||||
|
return mw.returnJson(True, '设置成功!') |
||||||
|
|
||||||
|
|
||||||
|
def setMaxSize(version): |
||||||
|
args = getArgs() |
||||||
|
if not 'max' in args: |
||||||
|
return 'missing time args!' |
||||||
|
max = args['max'] |
||||||
|
if int(max) < 2: |
||||||
|
return mw.returnJson(False, '上传大小限制不能小于2MB!') |
||||||
|
|
||||||
|
path = getServerDir() + '/' + version + '/etc/php.ini' |
||||||
|
conf = mw.readFile(path) |
||||||
|
rep = u"\nupload_max_filesize\s*=\s*[0-9]+M" |
||||||
|
conf = re.sub(rep, u'\nupload_max_filesize = ' + max + 'M', conf) |
||||||
|
rep = u"\npost_max_size\s*=\s*[0-9]+M" |
||||||
|
conf = re.sub(rep, u'\npost_max_size = ' + max + 'M', conf) |
||||||
|
mw.writeFile(path, conf) |
||||||
|
|
||||||
|
msg = mw.getInfo('设置PHP-{1}最大上传大小为[{2}MB]!', (version, max,)) |
||||||
|
mw.writeLog('插件管理[PHP]', msg) |
||||||
|
return mw.returnJson(True, '设置成功!') |
||||||
|
|
||||||
|
|
||||||
|
def getFpmConfig(version): |
||||||
|
|
||||||
|
filefpm = getServerDir() + '/' + version + '/etc/php-fpm.d/www.conf' |
||||||
|
conf = mw.readFile(filefpm) |
||||||
|
data = {} |
||||||
|
rep = "\s*pm.max_children\s*=\s*([0-9]+)\s*" |
||||||
|
tmp = re.search(rep, conf).groups() |
||||||
|
data['max_children'] = tmp[0] |
||||||
|
|
||||||
|
rep = "\s*pm.start_servers\s*=\s*([0-9]+)\s*" |
||||||
|
tmp = re.search(rep, conf).groups() |
||||||
|
data['start_servers'] = tmp[0] |
||||||
|
|
||||||
|
rep = "\s*pm.min_spare_servers\s*=\s*([0-9]+)\s*" |
||||||
|
tmp = re.search(rep, conf).groups() |
||||||
|
data['min_spare_servers'] = tmp[0] |
||||||
|
|
||||||
|
rep = "\s*pm.max_spare_servers \s*=\s*([0-9]+)\s*" |
||||||
|
tmp = re.search(rep, conf).groups() |
||||||
|
data['max_spare_servers'] = tmp[0] |
||||||
|
|
||||||
|
rep = "\s*pm\s*=\s*(\w+)\s*" |
||||||
|
tmp = re.search(rep, conf).groups() |
||||||
|
data['pm'] = tmp[0] |
||||||
|
return mw.getJson(data) |
||||||
|
|
||||||
|
|
||||||
|
def setFpmConfig(version): |
||||||
|
args = getArgs() |
||||||
|
# if not 'max' in args: |
||||||
|
# return 'missing time args!' |
||||||
|
|
||||||
|
version = args['version'] |
||||||
|
max_children = args['max_children'] |
||||||
|
start_servers = args['start_servers'] |
||||||
|
min_spare_servers = args['min_spare_servers'] |
||||||
|
max_spare_servers = args['max_spare_servers'] |
||||||
|
pm = args['pm'] |
||||||
|
|
||||||
|
file = getServerDir() + '/' + version + '/etc/php-fpm.d/www.conf' |
||||||
|
conf = mw.readFile(file) |
||||||
|
|
||||||
|
rep = "\s*pm.max_children\s*=\s*([0-9]+)\s*" |
||||||
|
conf = re.sub(rep, "\npm.max_children = " + max_children, conf) |
||||||
|
|
||||||
|
rep = "\s*pm.start_servers\s*=\s*([0-9]+)\s*" |
||||||
|
conf = re.sub(rep, "\npm.start_servers = " + start_servers, conf) |
||||||
|
|
||||||
|
rep = "\s*pm.min_spare_servers\s*=\s*([0-9]+)\s*" |
||||||
|
conf = re.sub(rep, "\npm.min_spare_servers = " + |
||||||
|
min_spare_servers, conf) |
||||||
|
|
||||||
|
rep = "\s*pm.max_spare_servers \s*=\s*([0-9]+)\s*" |
||||||
|
conf = re.sub(rep, "\npm.max_spare_servers = " + |
||||||
|
max_spare_servers + "\n", conf) |
||||||
|
|
||||||
|
rep = "\s*pm\s*=\s*(\w+)\s*" |
||||||
|
conf = re.sub(rep, "\npm = " + pm + "\n", conf) |
||||||
|
|
||||||
|
mw.writeFile(file, conf) |
||||||
|
reload(version) |
||||||
|
|
||||||
|
msg = mw.getInfo('设置PHP-{1}并发设置,max_children={2},start_servers={3},min_spare_servers={4},max_spare_servers={5}', (version, max_children, |
||||||
|
start_servers, min_spare_servers, max_spare_servers,)) |
||||||
|
mw.writeLog('插件管理[PHP]', msg) |
||||||
|
return mw.returnJson(True, '设置成功!') |
||||||
|
|
||||||
|
|
||||||
|
def checkFpmStatusFile(version): |
||||||
|
if mw.isInstalledWeb(): |
||||||
|
sdir = mw.getServerDir() |
||||||
|
dfile = sdir + '/openresty/nginx/conf/php_status/phpfpm_status_' + version + '.conf' |
||||||
|
if not os.path.exists(dfile): |
||||||
|
tpl = getPluginDir() + '/conf/phpfpm_status.conf' |
||||||
|
content = mw.readFile(tpl) |
||||||
|
content = contentReplace(content, version) |
||||||
|
mw.writeFile(dfile, content) |
||||||
|
mw.restartWeb() |
||||||
|
|
||||||
|
|
||||||
|
def getFpmStatus(version): |
||||||
|
checkFpmStatusFile(version) |
||||||
|
result = mw.httpGet( |
||||||
|
'http://127.0.0.1/phpfpm_status_' + version + '?json') |
||||||
|
tmp = json.loads(result) |
||||||
|
fTime = time.localtime(int(tmp['start time'])) |
||||||
|
tmp['start time'] = time.strftime('%Y-%m-%d %H:%M:%S', fTime) |
||||||
|
return mw.getJson(tmp) |
||||||
|
|
||||||
|
|
||||||
|
def getDisableFunc(version): |
||||||
|
filename = mw.getServerDir() + '/php/' + version + '/etc/php.ini' |
||||||
|
if not os.path.exists(filename): |
||||||
|
return mw.returnJson(False, '指定PHP版本不存在!') |
||||||
|
|
||||||
|
phpini = mw.readFile(filename) |
||||||
|
data = {} |
||||||
|
rep = "disable_functions\s*=\s{0,1}(.*)\n" |
||||||
|
tmp = re.search(rep, phpini).groups() |
||||||
|
data['disable_functions'] = tmp[0] |
||||||
|
return mw.getJson(data) |
||||||
|
|
||||||
|
|
||||||
|
def setDisableFunc(version): |
||||||
|
filename = mw.getServerDir() + '/php/' + version + '/etc/php.ini' |
||||||
|
if not os.path.exists(filename): |
||||||
|
return mw.returnJson(False, '指定PHP版本不存在!') |
||||||
|
|
||||||
|
args = getArgs() |
||||||
|
disable_functions = args['disable_functions'] |
||||||
|
|
||||||
|
phpini = mw.readFile(filename) |
||||||
|
rep = "disable_functions\s*=\s*.*\n" |
||||||
|
phpini = re.sub(rep, 'disable_functions = ' + |
||||||
|
disable_functions + "\n", phpini) |
||||||
|
|
||||||
|
msg = mw.getInfo('修改PHP-{1}的禁用函数为[{2}]', (version, disable_functions,)) |
||||||
|
mw.writeLog('插件管理[PHP]', msg) |
||||||
|
mw.writeFile(filename, phpini) |
||||||
|
reload(version) |
||||||
|
return mw.returnJson(True, '设置成功!') |
||||||
|
|
||||||
|
|
||||||
|
def checkPhpinfoFile(v): |
||||||
|
if mw.isInstalledWeb(): |
||||||
|
sdir = mw.getServerDir() |
||||||
|
dfile = sdir + '/openresty/nginx/conf/php_status/phpinfo_' + v + '.conf' |
||||||
|
if not os.path.exists(dfile): |
||||||
|
tpl = getPluginDir() + '/conf/phpinfo.conf' |
||||||
|
content = mw.readFile(tpl) |
||||||
|
content = contentReplace(content, v) |
||||||
|
mw.writeFile(dfile, content) |
||||||
|
mw.restartWeb() |
||||||
|
|
||||||
|
|
||||||
|
def getPhpinfo(v): |
||||||
|
checkPhpinfoFile(v) |
||||||
|
sPath = mw.getRootDir() + '/phpinfo/' + v |
||||||
|
mw.execShell("rm -rf " + mw.getRootDir() + '/phpinfo') |
||||||
|
mw.execShell("mkdir -p " + sPath) |
||||||
|
mw.writeFile(sPath + '/phpinfo.php', '<?php phpinfo(); ?>') |
||||||
|
url = 'http://127.0.0.1/' + v + '/phpinfo.php' |
||||||
|
phpinfo = mw.httpGet(url) |
||||||
|
os.system("rm -rf " + mw.getRootDir() + '/phpinfo') |
||||||
|
return phpinfo |
||||||
|
|
||||||
|
|
||||||
|
def get_php_info(args): |
||||||
|
return getPhpinfo(args['version']) |
||||||
|
|
||||||
|
|
||||||
|
def getLibConf(version): |
||||||
|
fname = mw.getServerDir() + '/php/' + version + '/etc/php.ini' |
||||||
|
if not os.path.exists(fname): |
||||||
|
return mw.returnJson(False, '指定PHP版本不存在!') |
||||||
|
|
||||||
|
phpini = mw.readFile(fname) |
||||||
|
|
||||||
|
libpath = getPluginDir() + '/versions/phplib.conf' |
||||||
|
phplib = json.loads(mw.readFile(libpath)) |
||||||
|
|
||||||
|
libs = [] |
||||||
|
tasks = mw.M('tasks').where( |
||||||
|
"status!=?", ('1',)).field('status,name').select() |
||||||
|
for lib in phplib: |
||||||
|
lib['task'] = '1' |
||||||
|
for task in tasks: |
||||||
|
tmp = mw.getStrBetween('[', ']', task['name']) |
||||||
|
if not tmp: |
||||||
|
continue |
||||||
|
tmp1 = tmp.split('-') |
||||||
|
if tmp1[0].lower() == lib['name'].lower(): |
||||||
|
lib['task'] = task['status'] |
||||||
|
lib['phpversions'] = [] |
||||||
|
lib['phpversions'].append(tmp1[1]) |
||||||
|
if phpini.find(lib['check']) == -1: |
||||||
|
lib['status'] = False |
||||||
|
else: |
||||||
|
lib['status'] = True |
||||||
|
libs.append(lib) |
||||||
|
return mw.returnJson(True, 'OK!', libs) |
||||||
|
|
||||||
|
|
||||||
|
def installLib(version): |
||||||
|
args = getArgs() |
||||||
|
data = checkArgs(args, ['name']) |
||||||
|
if not data[0]: |
||||||
|
return data[1] |
||||||
|
|
||||||
|
name = args['name'] |
||||||
|
execstr = "cd " + getPluginDir() + '/versions/' + version + " && /bin/bash " + \ |
||||||
|
name + '.sh' + ' install ' + version |
||||||
|
|
||||||
|
rettime = time.strftime('%Y-%m-%d %H:%M:%S') |
||||||
|
insert_info = (None, '安装[' + name + '-' + version + ']', |
||||||
|
'execshell', '0', rettime, execstr) |
||||||
|
mw.M('tasks').add('id,name,type,status,addtime,execstr', insert_info) |
||||||
|
return mw.returnJson(True, '已将下载任务添加到队列!') |
||||||
|
|
||||||
|
|
||||||
|
def uninstallLib(version): |
||||||
|
args = getArgs() |
||||||
|
data = checkArgs(args, ['name']) |
||||||
|
if not data[0]: |
||||||
|
return data[1] |
||||||
|
|
||||||
|
name = args['name'] |
||||||
|
execstr = "cd " + getPluginDir() + '/versions/' + version + " && /bin/bash " + \ |
||||||
|
name + '.sh' + ' uninstall ' + version |
||||||
|
|
||||||
|
data = mw.execShell(execstr) |
||||||
|
if data[0] == '' and data[1] == '': |
||||||
|
return mw.returnJson(True, '已经卸载成功!') |
||||||
|
else: |
||||||
|
return mw.returnJson(False, '卸载信息![通道0]:' + data[0] + "[通道0]:" + data[1]) |
||||||
|
|
||||||
|
|
||||||
|
def getConfAppStart(): |
||||||
|
pstart = mw.getServerDir() + '/php/app_start.php' |
||||||
|
return pstart |
||||||
|
|
||||||
|
if __name__ == "__main__": |
||||||
|
|
||||||
|
if len(sys.argv) < 3: |
||||||
|
print('missing parameters') |
||||||
|
exit(0) |
||||||
|
|
||||||
|
func = sys.argv[1] |
||||||
|
version = sys.argv[2] |
||||||
|
|
||||||
|
if func == 'status': |
||||||
|
print(status(version)) |
||||||
|
elif func == 'start': |
||||||
|
print(start(version)) |
||||||
|
elif func == 'stop': |
||||||
|
print(stop(version)) |
||||||
|
elif func == 'restart': |
||||||
|
print(restart(version)) |
||||||
|
elif func == 'reload': |
||||||
|
print(reload(version)) |
||||||
|
elif func == 'initd_status': |
||||||
|
print(initdStatus(version)) |
||||||
|
elif func == 'initd_install': |
||||||
|
print(initdInstall(version)) |
||||||
|
elif func == 'initd_uninstall': |
||||||
|
print(initdUinstall(version)) |
||||||
|
elif func == 'fpm_log': |
||||||
|
print(fpmLog(version)) |
||||||
|
elif func == 'fpm_slow_log': |
||||||
|
print(fpmSlowLog(version)) |
||||||
|
elif func == 'conf': |
||||||
|
print(getConf(version)) |
||||||
|
elif func == 'app_start': |
||||||
|
print(getConfAppStart()) |
||||||
|
elif func == 'get_php_conf': |
||||||
|
print(getPhpConf(version)) |
||||||
|
elif func == 'submit_php_conf': |
||||||
|
print(submitPhpConf(version)) |
||||||
|
elif func == 'get_limit_conf': |
||||||
|
print(getLimitConf(version)) |
||||||
|
elif func == 'set_max_time': |
||||||
|
print(setMaxTime(version)) |
||||||
|
elif func == 'set_max_size': |
||||||
|
print(setMaxSize(version)) |
||||||
|
elif func == 'get_fpm_conf': |
||||||
|
print(getFpmConfig(version)) |
||||||
|
elif func == 'set_fpm_conf': |
||||||
|
print(setFpmConfig(version)) |
||||||
|
elif func == 'get_fpm_status': |
||||||
|
print(getFpmStatus(version)) |
||||||
|
elif func == 'get_disable_func': |
||||||
|
print(getDisableFunc(version)) |
||||||
|
elif func == 'set_disable_func': |
||||||
|
print(setDisableFunc(version)) |
||||||
|
elif func == 'get_phpinfo': |
||||||
|
print(getPhpinfo(version)) |
||||||
|
elif func == 'get_lib_conf': |
||||||
|
print(getLibConf(version)) |
||||||
|
elif func == 'install_lib': |
||||||
|
print(installLib(version)) |
||||||
|
elif func == 'uninstall_lib': |
||||||
|
print(uninstallLib(version)) |
||||||
|
else: |
||||||
|
print("fail") |
@ -0,0 +1,25 @@ |
|||||||
|
# It's not recommended to modify this file in-place, because it |
||||||
|
# will be overwritten during upgrades. If you want to customize, |
||||||
|
# the best way is to use the "systemctl edit" command. |
||||||
|
|
||||||
|
[Unit] |
||||||
|
Description=The PHP {$VERSION} FastCGI Process Manager |
||||||
|
After=network.target |
||||||
|
|
||||||
|
[Service] |
||||||
|
Type=simple |
||||||
|
PIDFile={$SERVER_PATH}/php/{$VERSION}/var/run/php-fpm.pid |
||||||
|
ExecStart={$SERVER_PATH}/php/{$VERSION}/sbin/php-fpm --nodaemonize --fpm-config {$SERVER_PATH}/php/80/etc/php-fpm.conf |
||||||
|
ExecReload=/bin/kill -USR2 $MAINPID |
||||||
|
PrivateTmp=true |
||||||
|
ProtectSystem=full |
||||||
|
PrivateDevices=true |
||||||
|
ProtectKernelModules=true |
||||||
|
ProtectKernelTunables=true |
||||||
|
ProtectControlGroups=true |
||||||
|
RestrictRealtime=true |
||||||
|
RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX |
||||||
|
RestrictNamespaces=true |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=multi-user.target |
Loading…
Reference in new issue