diff --git a/plugins/openresty/bak/index_2022_6_17.py b/plugins/openresty/bak/index_2022_6_17.py new file mode 100755 index 000000000..490e06417 --- /dev/null +++ b/plugins/openresty/bak/index_2022_6_17.py @@ -0,0 +1,309 @@ +# coding:utf-8 + +import sys +import io +import os +import time +import subprocess + +sys.path.append(os.getcwd() + "/class/core") +import mw + + +app_debug = False + +if mw.isAppleSystem(): + app_debug = True + + +def getPluginName(): + return 'openresty' + + +def getPluginDir(): + return mw.getPluginDir() + '/' + getPluginName() + + +def getServerDir(): + return mw.getServerDir() + '/' + getPluginName() + + +def getInitDFile(): + if app_debug: + return '/tmp/' + getPluginName() + return '/etc/init.d/' + getPluginName() + + +def getArgs(): + args = sys.argv[2:] + 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 clearTemp(): + path_bin = getServerDir() + "/nginx" + mw.execShell('rm -rf ' + path_bin + '/client_body_temp') + mw.execShell('rm -rf ' + path_bin + '/fastcgi_temp') + mw.execShell('rm -rf ' + path_bin + '/proxy_temp') + mw.execShell('rm -rf ' + path_bin + '/scgi_temp') + mw.execShell('rm -rf ' + path_bin + '/uwsgi_temp') + + +def getConf(): + path = getServerDir() + "/nginx/conf/nginx.conf" + return path + + +def getConfTpl(): + path = getPluginDir() + '/conf/nginx.conf' + return path + + +def getOs(): + data = {} + data['os'] = mw.getOs() + ng_exe_bin = getServerDir() + "/nginx/sbin/nginx" + if checkAuthEq(ng_exe_bin, 'root'): + data['auth'] = True + else: + data['auth'] = False + return mw.getJson(data) + + +def getInitDTpl(): + path = getPluginDir() + "/init.d/nginx.tpl" + return path + + +def makeConf(): + vhost = getServerDir() + '/nginx/conf/vhost' + if not os.path.exists(vhost): + os.mkdir(vhost) + php_status = getServerDir() + '/nginx/conf/php_status' + if not os.path.exists(php_status): + os.mkdir(php_status) + + +def getFileOwner(filename): + import pwd + stat = os.lstat(filename) + uid = stat.st_uid + pw = pwd.getpwuid(uid) + return pw.pw_name + + +def checkAuthEq(file, owner='root'): + fowner = getFileOwner(file) + if (fowner == owner): + return True + return False + + +def confReplace(): + service_path = os.path.dirname(os.getcwd()) + content = mw.readFile(getConfTpl()) + content = content.replace('{$SERVER_PATH}', service_path) + + user = 'www' + user_group = 'www' + + if mw.getOs() == 'darwin': + # macosx do + user = mw.execShell( + "who | sed -n '2, 1p' |awk '{print $1}'")[0].strip() + # user = 'root' + user_group = 'staff' + content = content.replace('{$EVENT_MODEL}', 'kqueue') + else: + content = content.replace('{$EVENT_MODEL}', 'epoll') + + content = content.replace('{$OS_USER}', user) + content = content.replace('{$OS_USER_GROUP}', user_group) + + nconf = getServerDir() + '/nginx/conf/nginx.conf' + + __content = mw.readFile(nconf) + if __content.find('#user'): + mw.writeFile(getServerDir() + '/nginx/conf/nginx.conf', content) + + # give nginx root permission + ng_exe_bin = getServerDir() + "/nginx/sbin/nginx" + if not checkAuthEq(ng_exe_bin, 'root'): + args = getArgs() + sudoPwd = args['pwd'] + cmd_own = 'chown -R ' + 'root:' + user_group + ' ' + ng_exe_bin + os.system('echo %s|sudo -S %s' % (sudoPwd, cmd_own)) + cmd_mod = 'chmod 755 ' + ng_exe_bin + os.system('echo %s|sudo -S %s' % (sudoPwd, cmd_mod)) + cmd_s = 'chmod u+s ' + ng_exe_bin + os.system('echo %s|sudo -S %s' % (sudoPwd, cmd_s)) + + +def initDreplace(): + + file_tpl = getInitDTpl() + service_path = os.path.dirname(os.getcwd()) + + initD_path = getServerDir() + '/init.d' + + # Openresty is not installed + if not os.path.exists(getServerDir()): + print("ok") + exit(0) + + file_bin = initD_path + '/' + getPluginName() + if not os.path.exists(initD_path): + os.mkdir(initD_path) + + # initd replace + content = mw.readFile(file_tpl) + content = content.replace('{$SERVER_PATH}', service_path) + mw.writeFile(file_bin, content) + mw.execShell('chmod +x ' + file_bin) + + # config replace + confReplace() + + # make nginx vhost or other + makeConf() + + return file_bin + + +def status(): + data = mw.execShell( + "ps -ef|grep nginx |grep -v grep | grep -v python | awk '{print $2}'") + if data[0] == '': + return 'stop' + return 'start' + + +def start(): + file = initDreplace() + data = mw.execShell(file + ' start') + if data[1] == '': + return 'ok' + return data[1] + + +def stop(): + file = initDreplace() + data = mw.execShell(file + ' stop') + clearTemp() + if data[1] == '': + return 'ok' + return data[1] + + +def restart(): + file = initDreplace() + data = mw.execShell(file + ' restart') + if data[1] == '': + return 'ok' + return data[1] + + +def reload(): + file = initDreplace() + data = mw.execShell(file + ' reload') + if data[1] == '': + return 'ok' + return data[1] + + +def initdStatus(): + if not app_debug: + if mw.isAppleSystem(): + return "Apple Computer does not support" + initd_bin = getInitDFile() + if os.path.exists(initd_bin): + return 'ok' + return 'fail' + + +def initdInstall(): + import shutil + if not app_debug: + if mw.isAppleSystem(): + return "Apple Computer does not support" + + source_bin = initDreplace() + initd_bin = getInitDFile() + shutil.copyfile(source_bin, initd_bin) + mw.execShell('chmod +x ' + initd_bin) + mw.execShell('chkconfig --add ' + getPluginName()) + return 'ok' + + +def initdUinstall(): + if not app_debug: + if mw.isAppleSystem(): + return "Apple Computer does not support" + + mw.execShell('chkconfig --del ' + getPluginName()) + initd_bin = getInitDFile() + os.remove(initd_bin) + return 'ok' + + +def runInfo(): + # 取Openresty负载状态 + try: + result = mw.httpGet('http://127.0.0.1/nginx_status') + tmp = result.split() + data = {} + data['active'] = tmp[2] + data['accepts'] = tmp[9] + data['handled'] = tmp[7] + data['requests'] = tmp[8] + data['Reading'] = tmp[11] + data['Writing'] = tmp[13] + data['Waiting'] = tmp[15] + return mw.getJson(data) + except Exception as e: + return 'oprenresty not started' + + +def errorLogPath(): + return getServerDir() + '/nginx/logs/error.log' + + +if __name__ == "__main__": + func = sys.argv[1] + if func == 'status': + print(status()) + elif func == 'start': + print(start()) + elif func == 'stop': + print(stop()) + elif func == 'restart': + print(restart()) + elif func == 'reload': + print(reload()) + elif func == 'initd_status': + print(initdStatus()) + elif func == 'initd_install': + print(initdInstall()) + elif func == 'initd_uninstall': + print(initdUinstall()) + elif func == 'conf': + print(getConf()) + elif func == 'get_os': + print(getOs()) + elif func == 'run_info': + print(runInfo()) + elif func == 'error_log': + print(errorLogPath()) + else: + print('error') diff --git a/plugins/openresty/bak/nginx_2022_6_17.tpl b/plugins/openresty/bak/nginx_2022_6_17.tpl new file mode 100644 index 000000000..ebc8555a9 --- /dev/null +++ b/plugins/openresty/bak/nginx_2022_6_17.tpl @@ -0,0 +1,118 @@ +#! /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 diff --git a/plugins/openresty/index.py b/plugins/openresty/index.py index 490e06417..c1ccbd0cb 100755 --- a/plugins/openresty/index.py +++ b/plugins/openresty/index.py @@ -157,11 +157,12 @@ def initDreplace(): initD_path = getServerDir() + '/init.d' - # Openresty is not installed + # OpenResty is not installed if not os.path.exists(getServerDir()): print("ok") exit(0) + # init.d file_bin = initD_path + '/' + getPluginName() if not os.path.exists(initD_path): os.mkdir(initD_path) @@ -175,6 +176,16 @@ def initDreplace(): # config replace confReplace() + # systemd + systemDir = '/lib/systemd/system' + systemService = systemDir + '/openresty.service' + systemServiceTpl = getPluginDir() + '/init.d/openresty.service.tpl' + if os.path.exists(systemDir) and not os.path.exists(systemService): + se_content = mw.readFile(systemServiceTpl) + se_content = se_content.replace('{$SERVER_PATH}', service_path) + mw.writeFile(systemService, se_content) + mw.execShell('systemctl daemon-reload') + # make nginx vhost or other makeConf() @@ -223,37 +234,30 @@ def reload(): def initdStatus(): - if not app_debug: - if mw.isAppleSystem(): - return "Apple Computer does not support" - initd_bin = getInitDFile() - if os.path.exists(initd_bin): - return 'ok' - return 'fail' + + if mw.isAppleSystem(): + return "Apple Computer does not support" + + shell_cmd = 'systemctl status openresty | grep loaded | grep "enabled;"' + data = mw.execShell(shell_cmd) + if data[0] == '': + return 'fail' + return 'ok' def initdInstall(): - import shutil - if not app_debug: - if mw.isAppleSystem(): - return "Apple Computer does not support" - - source_bin = initDreplace() - initd_bin = getInitDFile() - shutil.copyfile(source_bin, initd_bin) - mw.execShell('chmod +x ' + initd_bin) - mw.execShell('chkconfig --add ' + getPluginName()) + if mw.isAppleSystem(): + return "Apple Computer does not support" + + mw.execShell('systemctl enable openresty') return 'ok' def initdUinstall(): - if not app_debug: - if mw.isAppleSystem(): - return "Apple Computer does not support" + if mw.isAppleSystem(): + return "Apple Computer does not support" - mw.execShell('chkconfig --del ' + getPluginName()) - initd_bin = getInitDFile() - os.remove(initd_bin) + mw.execShell('systemctl disable openresty') return 'ok' diff --git a/plugins/openresty/init.d/openresty.service.tpl b/plugins/openresty/init.d/openresty.service.tpl new file mode 100644 index 000000000..b9b46574f --- /dev/null +++ b/plugins/openresty/init.d/openresty.service.tpl @@ -0,0 +1,14 @@ +[Unit] +Description=OpenResty is a dynamic web platform based on NGINX and LuaJIT. +After=network.target + +[Service] +Type=forking +ExecStart=/usr/local/open/sbin/nginx -c /usr/local/nginx/conf/nginx.conf +ExecStop=/usr/local/nginx/sbin/nginx -s stop +ExecReload=/usr/local/nginx/sbin/nginx -s reload +KillMode=process +Restart=on-failure + +[Install] +WantedBy=multi-user.target \ No newline at end of file