mirror of https://github.com/midoks/mdserver-web
parent
24ed7e3460
commit
562cfc2af5
After Width: | Height: | Size: 1017 B |
@ -0,0 +1,16 @@ |
||||
<div class="bt-form"> |
||||
<div class="bt-w-main"> |
||||
<div class="bt-w-menu"> |
||||
<p class="bgw" onclick="pluginService('pm2');">服务</p> |
||||
<p onclick="pluginInitD('pm2');">项目列表</p> |
||||
<p onclick="pluginConfig('pm2');">Node版本</p> |
||||
<p onclick="redisStatus();">模版管理</p> |
||||
<p onclick="pluginLogs('pm2','','run_log');">日志管理</p> |
||||
</div> |
||||
<div class="bt-w-con pd15"> |
||||
<div class="soft-man-con"></div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<script type="text/javascript"> |
||||
</script> |
@ -0,0 +1,474 @@ |
||||
# coding:utf-8 |
||||
|
||||
import sys |
||||
import io |
||||
import os |
||||
import time |
||||
import shutil |
||||
|
||||
sys.path.append(os.getcwd() + "/class/core") |
||||
import public |
||||
|
||||
app_debug = False |
||||
if public.isAppleSystem(): |
||||
app_debug = True |
||||
|
||||
|
||||
def getPluginName(): |
||||
return 'pureftp' |
||||
|
||||
|
||||
def getPluginDir(): |
||||
return public.getPluginDir() + '/' + getPluginName() |
||||
|
||||
|
||||
def getServerDir(): |
||||
return public.getServerDir() + '/' + getPluginName() |
||||
|
||||
|
||||
def getInitDFile(): |
||||
if app_debug: |
||||
return '/tmp/' + getPluginName() |
||||
return '/etc/init.d/' + getPluginName() |
||||
|
||||
|
||||
def getConf(): |
||||
path = getServerDir() + "/etc/pure-ftpd.conf" |
||||
return path |
||||
|
||||
|
||||
def getInitDTpl(): |
||||
path = getPluginDir() + "/init.d/pure-ftpd.tpl" |
||||
return path |
||||
|
||||
|
||||
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 status(): |
||||
cmd = "ps -ef|grep pure-ftpd |grep -v grep | grep -v python | awk '{print $2}'" |
||||
data = public.execShell(cmd) |
||||
if data[0] == '': |
||||
return 'stop' |
||||
return 'start' |
||||
|
||||
|
||||
def contentReplace(content): |
||||
service_path = public.getServerDir() |
||||
content = content.replace('{$ROOT_PATH}', public.getRootDir()) |
||||
content = content.replace('{$SERVER_PATH}', service_path) |
||||
return content |
||||
|
||||
|
||||
def initDreplace(): |
||||
|
||||
file_tpl = getInitDTpl() |
||||
service_path = os.path.dirname(os.getcwd()) |
||||
|
||||
initD_path = getServerDir() + '/init.d' |
||||
if not os.path.exists(initD_path): |
||||
os.mkdir(initD_path) |
||||
file_bin = initD_path + '/' + getPluginName() |
||||
|
||||
# initd replace |
||||
if not os.path.exists(file_bin): |
||||
content = public.readFile(file_tpl) |
||||
content = contentReplace(content) |
||||
public.writeFile(file_bin, content) |
||||
public.execShell('chmod +x ' + file_bin) |
||||
|
||||
pureSbinConfig = getServerDir() + "/sbin/pure-config.pl" |
||||
if not os.path.exists(pureSbinConfig): |
||||
pureTplConfig = getPluginDir() + "/init.d/pure-config.pl" |
||||
content = public.readFile(pureTplConfig) |
||||
content = contentReplace(content) |
||||
public.writeFile(pureSbinConfig, content) |
||||
public.execShell('chmod +x ' + pureSbinConfig) |
||||
|
||||
pureFtpdConfig = getServerDir() + "/etc/pure-ftpd.conf" |
||||
pureFtpdConfigBak = getServerDir() + "/etc/pure-ftpd.bak.conf" |
||||
pureFtpdConfigTpl = getPluginDir() + "/conf/pure-ftpd.conf" |
||||
|
||||
if not os.path.exists(pureFtpdConfigBak): |
||||
shutil.copyfile(pureFtpdConfig, pureFtpdConfigBak) |
||||
content = public.readFile(pureFtpdConfigTpl) |
||||
content = contentReplace(content) |
||||
public.writeFile(pureFtpdConfig, content) |
||||
|
||||
return file_bin |
||||
|
||||
|
||||
def start(): |
||||
file = initDreplace() |
||||
data = public.execShell(file + ' start') |
||||
if data[1] == '': |
||||
return 'ok' |
||||
return data[1] |
||||
|
||||
|
||||
def stop(): |
||||
file = initDreplace() |
||||
data = public.execShell(file + ' stop') |
||||
if data[1] == '': |
||||
return 'ok' |
||||
return data[1] |
||||
|
||||
|
||||
def restart(): |
||||
file = initDreplace() |
||||
data = public.execShell(file + ' restart') |
||||
if data[1] == '': |
||||
return 'ok' |
||||
return 'fail' |
||||
|
||||
|
||||
def reload(): |
||||
file = initDreplace() |
||||
data = public.execShell(file + ' reload') |
||||
if data[1] == '': |
||||
return 'ok' |
||||
return data[1] |
||||
|
||||
|
||||
def initdStatus(): |
||||
if not app_debug: |
||||
os_name = public.getOs() |
||||
if os_name == 'darwin': |
||||
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: |
||||
os_name = public.getOs() |
||||
if os_name == 'darwin': |
||||
return "Apple Computer does not support" |
||||
|
||||
source_bin = initDreplace() |
||||
initd_bin = getInitDFile() |
||||
shutil.copyfile(source_bin, initd_bin) |
||||
public.execShell('chmod +x ' + initd_bin) |
||||
return 'ok' |
||||
|
||||
|
||||
def initdUinstall(): |
||||
if not app_debug: |
||||
os_name = public.getOs() |
||||
if os_name == 'darwin': |
||||
return "Apple Computer does not support" |
||||
initd_bin = getInitDFile() |
||||
os.remove(initd_bin) |
||||
return 'ok' |
||||
|
||||
|
||||
def pftpDB(): |
||||
file = getServerDir() + '/ftps.db' |
||||
if not os.path.exists(file): |
||||
conn = public.M('ftps').dbPos(getServerDir(), 'ftps') |
||||
csql = public.readFile(getPluginDir() + '/conf/ftps.sql') |
||||
csql_list = csql.split(';') |
||||
for index in range(len(csql_list)): |
||||
conn.execute(csql_list[index], ()) |
||||
else: |
||||
conn = public.M('ftps').dbPos(getServerDir(), 'ftps') |
||||
return conn |
||||
|
||||
|
||||
def pftpUser(): |
||||
if public.isAppleSystem(): |
||||
user = public.execShell( |
||||
"who | sed -n '2, 1p' |awk '{print $1}'")[0].strip() |
||||
return user |
||||
return 'www' |
||||
|
||||
|
||||
def pftpAdd(username, password, path): |
||||
user = pftpUser() |
||||
|
||||
if not os.path.exists(path): |
||||
os.makedirs(path) |
||||
if public.isAppleSystem(): |
||||
os.system('chown ' + user + '.staff ' + path) |
||||
else: |
||||
os.system('chown www.www ' + path) |
||||
|
||||
cmd = getServerDir() + '/bin/pure-pw useradd ' + username + ' -u ' + user + ' -d ' + \ |
||||
path + '<<EOF \n' + password + '\n' + password + '\nEOF' |
||||
return public.execShell(cmd) |
||||
|
||||
|
||||
def pftpMod(username, password): |
||||
user = pftpUser() |
||||
cmd = getServerDir() + '/bin/pure-pw passwd ' + username + \ |
||||
'<<EOF \n' + password + '\n' + password + '\nEOF' |
||||
return public.execShell(cmd) |
||||
|
||||
|
||||
def pftpStop(username): |
||||
cmd = getServerDir() + '/bin/pure-pw usermod ' + username + ' -r 1' |
||||
return public.execShell(cmd) |
||||
|
||||
|
||||
def pftpStart(username): |
||||
cmd = getServerDir() + '/bin/pure-pw usermod ' + username + " -r ''" |
||||
return public.execShell(cmd) |
||||
|
||||
|
||||
def pftpReload(): |
||||
public.execShell(getServerDir() + '/bin/pure-pw mkdb ' + |
||||
getServerDir() + '/etc/pureftpd.pdb') |
||||
|
||||
|
||||
def getWwwDir(): |
||||
path = public.getWwwDir() |
||||
return path |
||||
|
||||
|
||||
def getFtpPort(): |
||||
import re |
||||
try: |
||||
file = getServerDir() + '/etc/pure-ftpd.conf' |
||||
conf = public.readFile(file) |
||||
rep = "\n#?\s*Bind\s+[0-9]+\.[0-9]+\.[0-9]+\.+[0-9]+,([0-9]+)" |
||||
port = re.search(rep, conf).groups()[0] |
||||
except: |
||||
port = '21' |
||||
return port |
||||
|
||||
|
||||
def getFtpList(): |
||||
args = getArgs() |
||||
page = 1 |
||||
page_size = 10 |
||||
search = '' |
||||
if 'page' in args: |
||||
page = int(args['page']) |
||||
|
||||
if 'page_size' in args: |
||||
page_size = int(args['page_size']) |
||||
|
||||
if 'search' in args: |
||||
search = args['search'] |
||||
|
||||
data = {} |
||||
conn = pftpDB() |
||||
limit = str((page - 1) * page_size) + ',' + str(page_size) |
||||
# print limit, search |
||||
condition = '' |
||||
if not search == '': |
||||
condition = "name like '%" + search + "%'" |
||||
field = 'id,pid,name,password,path,status,ps,addtime' |
||||
clist = conn.where(condition, ()).field( |
||||
field).limit(limit).order('id desc').select() |
||||
|
||||
count = conn.where(condition, ()).count() |
||||
_page = {} |
||||
_page['count'] = count |
||||
_page['p'] = page |
||||
_page['row'] = page_size |
||||
_page['tojs'] = 'ftpList' |
||||
data['page'] = public.getPage(_page) |
||||
|
||||
info = {} |
||||
info['ip'] = public.getLocalIp() |
||||
info['port'] = getFtpPort() |
||||
data['info'] = info |
||||
data['data'] = clist |
||||
|
||||
return public.getJson(data) |
||||
|
||||
|
||||
def addFtp(): |
||||
import urllib |
||||
args = getArgs() |
||||
if not 'ftp_username' in args: |
||||
return 'ftp_username missing' |
||||
|
||||
if not 'ftp_password' in args: |
||||
return 'ftp_password missing' |
||||
|
||||
if not 'path' in args: |
||||
return 'path missing' |
||||
|
||||
if not 'ps' in args: |
||||
return 'ps missing' |
||||
|
||||
path = urllib.unquote(args['path']) |
||||
user = args['ftp_username'] |
||||
pwd = args['ftp_password'] |
||||
ps = args['ps'] |
||||
|
||||
addtime = time.strftime('%Y-%m-%d %X', time.localtime()) |
||||
|
||||
data = pftpAdd(user, pwd, path) |
||||
conn = pftpDB() |
||||
conn.add('pid,name,password,path,status,ps,addtime', |
||||
(0, user, pwd, path, 1, ps, addtime)) |
||||
pftpReload() |
||||
if data[1] == '': |
||||
return 'ok' |
||||
return data[0] |
||||
|
||||
|
||||
def delFtp(): |
||||
args = getArgs() |
||||
if not 'id' in args: |
||||
return 'ftp_username missing' |
||||
|
||||
if not 'username' in args: |
||||
return 'username missing' |
||||
|
||||
public.execShell(getServerDir() + |
||||
'/bin/pure-pw userdel ' + args['username']) |
||||
pftpReload() |
||||
conn = pftpDB() |
||||
conn.where("id=?", (args['id'],)).delete() |
||||
public.writeLog('TYPE_FTP', 'FTP_DEL_SUCCESS', (args['username'],)) |
||||
return 'ok' |
||||
|
||||
|
||||
def modFtp(): |
||||
args = getArgs() |
||||
if not 'id' in args: |
||||
return 'id missing' |
||||
|
||||
if not 'name' in args: |
||||
return 'name missing' |
||||
|
||||
if not 'password' in args: |
||||
return 'password missing' |
||||
|
||||
conn = pftpDB() |
||||
data = pftpMod(args['name'], args['password']) |
||||
pftpReload() |
||||
|
||||
conn.where('id=?', (int(args['id']),)).save( |
||||
'password', (args['password'],)) |
||||
# print data |
||||
if data[1] == '': |
||||
return 'ok' |
||||
return data[0] |
||||
|
||||
|
||||
def modFtpPort(): |
||||
import re |
||||
args = getArgs() |
||||
if not 'port' in args: |
||||
return 'port missing' |
||||
try: |
||||
port = args['port'] |
||||
if int(port) < 1 or int(port) > 65535: |
||||
return '端口范围不正确!' |
||||
file = file = getServerDir() + '/etc/pure-ftpd.conf' |
||||
conf = public.readFile(file) |
||||
rep = u"\n#?\s*Bind\s+[0-9]+\.[0-9]+\.[0-9]+\.+[0-9]+,([0-9]+)" |
||||
# preg_match(rep,conf,tmp) |
||||
conf = re.sub( |
||||
rep, "\nBind 0.0.0.0," + port, conf) |
||||
public.writeFile(file, conf) |
||||
restart() |
||||
return 'ok' |
||||
except Exception as ex: |
||||
return str(ex) |
||||
|
||||
|
||||
def stopPort(): |
||||
args = getArgs() |
||||
if not 'id' in args: |
||||
return 'id missing' |
||||
|
||||
if not 'username' in args: |
||||
return 'username missing' |
||||
|
||||
if not 'status' in args: |
||||
return 'status missing' |
||||
|
||||
data = pftpStop(args['username']) |
||||
pftpReload() |
||||
conn = pftpDB() |
||||
conn.where('id=?', (int(args['id']),)).save( |
||||
'status', (args['status'],)) |
||||
|
||||
if data[1] == '': |
||||
return 'ok' |
||||
return data[0] |
||||
|
||||
|
||||
def startPort(): |
||||
args = getArgs() |
||||
if not 'id' in args: |
||||
return 'id missing' |
||||
|
||||
if not 'username' in args: |
||||
return 'username missing' |
||||
|
||||
if not 'status' in args: |
||||
return 'status missing' |
||||
|
||||
data = pftpStart(args['username']) |
||||
pftpReload() |
||||
conn = pftpDB() |
||||
conn.where('id=?', (int(args['id']),)).save( |
||||
'status', (args['status'],)) |
||||
|
||||
if data[1] == '': |
||||
return 'ok' |
||||
return data[0] |
||||
|
||||
|
||||
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_www_dir': |
||||
print getWwwDir() |
||||
elif func == 'get_ftp_list': |
||||
print getFtpList() |
||||
elif func == 'add_ftp': |
||||
print addFtp() |
||||
elif func == 'del_ftp': |
||||
print delFtp() |
||||
elif func == 'mod_ftp': |
||||
print modFtp() |
||||
elif func == 'mod_ftp_port': |
||||
print modFtpPort() |
||||
elif func == 'stop_ftp': |
||||
print stopPort() |
||||
elif func == 'start_ftp': |
||||
print startPort() |
||||
else: |
||||
print 'error' |
@ -0,0 +1,15 @@ |
||||
{ |
||||
"title":"PM2管理器", |
||||
"tip":"soft", |
||||
"name":"pm2", |
||||
"type":"运行环境", |
||||
"ps":"node.js管理器,内置 node.js + npm + nvm + pm2.!", |
||||
"versions":["4.4.15","4.8.4"], |
||||
"updates":["4.4.15","4.8.4"], |
||||
"shell":"install.sh", |
||||
"checks":"server/pm2", |
||||
"author":"pm2", |
||||
"home":"http://pm2.keymetrics.io/", |
||||
"date":"2019-02-27", |
||||
"pid": "4" |
||||
} |
@ -0,0 +1,35 @@ |
||||
#!/bin/bash |
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin |
||||
export PATH |
||||
|
||||
|
||||
curPath=`pwd` |
||||
rootPath=$(dirname "$curPath") |
||||
rootPath=$(dirname "$rootPath") |
||||
serverPath=$(dirname "$rootPath") |
||||
|
||||
|
||||
install_tmp=${rootPath}/tmp/bt_install.pl |
||||
|
||||
npm install pm2 -g |
||||
|
||||
Install_pm2() |
||||
{ |
||||
echo '正在安装脚本文件...' > $install_tmp |
||||
mkdir -p $serverPath/pm2 |
||||
echo '1.0' > $serverPath/pm2/version.pl |
||||
echo '安装完成' > $install_tmp |
||||
} |
||||
|
||||
Uninstall_pm2() |
||||
{ |
||||
rm -rf $serverPath/pm2 |
||||
echo "卸载完成" > $install_tmp |
||||
} |
||||
|
||||
action=$1 |
||||
if [ "${1}" == 'install' ];then |
||||
Install_pm2 |
||||
else |
||||
Uninstall_pm2 |
||||
fi |
Loading…
Reference in new issue