redis调整ok

pull/109/head
Mr Chen 7 years ago
parent 4ba7b7110a
commit 64706e4210
  1. 7
      plugins/redis/config/redis.conf
  2. 140
      plugins/redis/index.html
  3. 146
      plugins/redis/index.py
  4. 73
      plugins/redis/init.d/redis.tpl

@ -1,6 +1,5 @@
daemonize yes daemonize yes
pidfile redis.pid pidfile {$SERVER_PATH}/redis/redis_6379.pid
port 6379 port 6379
timeout 0 timeout 0
@ -8,7 +7,7 @@ tcp-keepalive 0
loglevel notice loglevel notice
logfile redis.log logfile {$SERVER_PATH}/redis/data/redis.log
databases 16 databases 16
################################ SNAPSHOTTING ################################# ################################ SNAPSHOTTING #################################
@ -20,7 +19,7 @@ stop-writes-on-bgsave-error yes
rdbcompression yes rdbcompression yes
rdbchecksum yes rdbchecksum yes
dbfilename dump.rdb dbfilename dump.rdb
dir data/ dir {$SERVER_PATH}/redis/data/
################################# REPLICATION ################################# ################################# REPLICATION #################################

@ -1,150 +1,18 @@
<div class="bt-form"> <div class="bt-form">
<div class="bt-w-main"> <div class="bt-w-main">
<div class="bt-w-menu"> <div class="bt-w-menu">
<p class="bgw" onclick="redisService();">服务</p> <p class="bgw" onclick="pluginService('redis');">服务</p>
<p onclick="redisConfig();">配置修改</p> <p onclick="pluginInitD('redis');">自启动</p>
<p onclick="pluginConfig('redis');">配置修改</p>
<p onclick="redisStatus();">负载状态</p> <p onclick="redisStatus();">负载状态</p>
</div> </div>
<div class="bt-w-con pd15"> <div class="bt-w-con pd15">
<div class="soft-man-con"></div> <div class="soft-man-con"></div>
</div> </div>
</div> </div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
pluginService('redis');
redisService();
function redisOp(a, b) {
var c = "name=" + a + "&func=" + b;
var d = "";
switch(b) {
case "stop":d = '停止';break;
case "start":d = '启动';break;
case "restart":d = '重启';break;
case "reload":d = '重载';break;
}
layer.confirm( '您真的要{1}{2}服务吗?'.replace('{1}', d).replace('{2}', a), {icon:3,closeBtn: 2}, function() {
var e = layer.msg('正在{1}{2}服务,请稍候...'.replace('{1}', d).replace('{2}', a), {icon: 16,time: 0});
$.post("/plugins/run", c, function(g) {
layer.close(e);
var f = g.data == 'ok' ? '{1}服务已{2}'.replace('{1}', a).replace('{2}', d):'{1}服务{2}失败!'.replace('{1}', a).replace('{2}', d);
layer.msg(f, {icon: g.data == 'ok' ? 1 : 2});
if(b != "reload" && g.data == 'ok') {
if (b == 'start') {
setRedisService('redis', true);
} else if (b=='stop'){
setRedisService('redis', false);
} else {
}
}
if(g.data != 'ok') {
layer.msg(g.data, {icon: 2,time: 0,shade: 0.3,shadeClose: true});
}
},'json').error(function() {
layer.close(e);
layer.msg('操作成功!', {icon: 1});
});
})
}
//服务
function setRedisService(name, status){
var serviceCon ='<p class="status">当前状态:<span>'+(status ? '开启' : '关闭' )+
'</span><span style="color: '+
(status?'#20a53a;':'red;')+
' margin-left: 3px;" class="glyphicon ' + (status?'glyphicon glyphicon-play':'glyphicon-pause')+'"></span></p><div class="sfm-opt">\
<button class="btn btn-default btn-sm" onclick="redisOp(\''+name+'\',\''+(status?'stop':'start')+'\')">'+(status?'停止':'启动')+'</button>\
<button class="btn btn-default btn-sm" onclick="redisOp(\''+name+'\',\'restart\')">重启</button>\
<button class="btn btn-default btn-sm" onclick="redisOp(\''+name+'\',\'reload\')">重载配置</button>\
</div>';
$(".soft-man-con").html(serviceCon);
}
//服务
function redisService(){
$.post('/plugins/run', {name:'redis', func:'status'}, function(data) {
console.log(data);
if(!data.status){
layer.msg(data.msg,{icon:0,time:3000,shade: [0.3, '#000']});
return;
}
if (data.data == 'start'){
setRedisService('redis', true);
} else {
setRedisService('redis', false);
}
},'json');
}
//配置修改 --- start
function redisConfig(type){
var con = '<p style="color: #666; margin-bottom: 7px">提示:Ctrl+F 搜索关键字,Ctrl+G 查找下一个,Ctrl+S 保存,Ctrl+Shift+R 查找替换!</p><textarea class="bt-input-text" style="height: 320px; line-height:18px;" id="textBody"></textarea>\
<button id="OnlineEditFileBtn" class="btn btn-success btn-sm" style="margin-top:10px;">保存</button>\
<ul class="help-info-text c7 ptb15">\
<li>此处为redis主配置文件,若您不了解配置规则,请勿随意修改。</li>\
</ul>';
$(".soft-man-con").html(con);
var loadT = layer.msg('配置文件路径获取中...',{icon:16,time:0,shade: [0.3, '#000']});
$.post('/plugins/run', {name:'redis', func:'conf'},function (data) {
layer.close(loadT);
var loadT2 = layer.msg('文件内容获取中...',{icon:16,time:0,shade: [0.3, '#000']});
var fileName = data.data;
$.post('/files/get_body', 'path=' + fileName, function(rdata) {
layer.close(loadT2);
if (!rdata.status){
layer.msg(rdata.msg,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}
$("#textBody").empty().text(rdata.data.data);
$(".CodeMirror").remove();
var editor = CodeMirror.fromTextArea(document.getElementById("textBody"), {
extraKeys: {
"Ctrl-Space": "autocomplete",
"Ctrl-F": "findPersistent",
"Ctrl-H": "replaceAll",
"Ctrl-S": function() {
redisConfSafe(fileName);
}
},
lineNumbers: true,
matchBrackets:true,
});
editor.focus();
$(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0});
$("#OnlineEditFileBtn").click(function(){
$("#textBody").text(editor.getValue());
redisConfSave(fileName);
});
},'json');
},'json');
}
//配置保存
function redisConfSave(fileName) {
var data = encodeURIComponent($("#textBody").val());
var encoding = 'utf-8';
var loadT = layer.msg('保存中...', {
icon: 16,
time: 0
});
$.post('/files/save_body', 'data=' + data + '&path=' + fileName + '&encoding=' + encoding, function(rdata) {
layer.close(loadT);
layer.msg(rdata.msg, {
icon: rdata.status ? 1 : 2
});
},'json');
}
//配置修改 --- end
//redis负载状态 start //redis负载状态 start
function redisStatus() { function redisStatus() {

@ -8,6 +8,45 @@ import time
sys.path.append(os.getcwd() + "/class/core") sys.path.append(os.getcwd() + "/class/core")
import public import public
app_debug = False
def getPluginName():
return 'redis'
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 = getPluginDir() + "/config/redis.conf"
return path
def getInitDTpl():
path = getPluginDir() + "/init.d/redis.tpl"
return path
def getArgs():
args = sys.argv[2:]
tmp = {}
for i in range(len(args)):
t = args[i].split(':')
tmp[t[0]] = t[1]
return tmp
def status(): def status():
data = public.execShell( data = public.execShell(
@ -17,35 +56,64 @@ def status():
return 'start' return 'start'
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
content = public.readFile(file_tpl)
content = content.replace('{$SERVER_PATH}', service_path)
public.writeFile(file_bin, content)
public.execShell('chmod +x ' + file_bin)
# config replace
conf_content = public.readFile(getConf())
conf_content = conf_content.replace('{$SERVER_PATH}', service_path)
public.writeFile(getServerDir() + '/redis.conf', conf_content)
return file_bin
def start(): def start():
path = os.path.dirname(os.getcwd()) file = initDreplace()
cmd = path + "/redis/bin/redis-server" data = public.execShell(file + ' start')
cmd = cmd + " " + path + "/redis/redis.conf" if data[1] == '':
data = public.execShell(cmd)
if data[0] == '':
return 'ok' return 'ok'
return 'fail' return 'fail'
def stop(): def stop():
data = public.execShell( file = initDreplace()
"ps -ef|grep redis |grep -v grep |grep -v python |awk '{print $2}' | xargs kill -9") data = public.execShell(file + ' stop')
if data[0] == '': if data[1] == '':
return 'ok' return 'ok'
return 'fail' return 'fail'
def restart(): def restart():
return 'ok' file = initDreplace()
data = public.execShell(file + ' restart')
if data[1] == '':
return 'ok'
return 'fail'
def reload(): def reload():
return 'ok' file = initDreplace()
data = public.execShell(file + ' reload')
if data[1] == '':
return 'ok'
return 'fail'
def runInfo(): def runInfo():
path = os.path.dirname(os.getcwd()) cmd = getServerDir() + "/bin/redis-cli info"
cmd = path + "/redis/bin/redis-cli info"
data = public.execShell(cmd)[0] data = public.execShell(cmd)[0]
res = [ res = [
'tcp_port', 'tcp_port',
@ -74,17 +142,43 @@ def runInfo():
return public.getJson(result) return public.getJson(result)
def getConf(): def initdStatus():
path = os.path.dirname(os.getcwd()) + "/redis/redis.conf" if not app_debug:
return path 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'
if __name__ == "__main__": if __name__ == "__main__":
func = sys.argv[1] func = sys.argv[1]
if func == 'run_info': if func == 'status':
print runInfo()
elif func == 'conf':
print getConf()
elif func == 'status':
print status() print status()
elif func == 'start': elif func == 'start':
print start() print start()
@ -94,3 +188,15 @@ if __name__ == "__main__":
print restart() print restart()
elif func == 'reload': elif func == 'reload':
print reload() print reload()
elif func == 'initd_status':
print initdStatus()
elif func == 'initd_install':
print initdInstall()
elif func == 'initd_uninstall':
print initdUinstall()
elif func == 'run_info':
print runInfo()
elif func == 'conf':
print getConf()
else:
print 'error'

@ -0,0 +1,73 @@
#!/bin/sh
# chkconfig: 2345 55 25
# description: Redis Service
### BEGIN INIT INFO
# Provides: Redis
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts Redis
# Description: starts the MDW-Web
### END INIT INFO
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
CONF="{$SERVER_PATH}/redis/redis.conf"
REDISPORT=$(cat $CONF |grep port|grep -v '#'|awk '{print $2}')
REDISPASS=$(cat $CONF |grep requirepass|grep -v '#'|awk '{print $2}')
if [ "$REDISPASS" != "" ];then
REDISPASS=" -a $REDISPASS"
fi
EXEC={$SERVER_PATH}/redis/bin/redis-server
CLIEXEC="{$SERVER_PATH}/redis/bin/redis-cli -p $REDISPORT$REDISPASS"
PIDFILE={$SERVER_PATH}/redis/redis_6379.pid
mkdir -p {$SERVER_PATH}/redis/data
redis_start(){
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
nohup $EXEC $CONF >> {$SERVER_PATH}/redis/logs.pl 2>&1 &
fi
}
redis_stop(){
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
}
case "$1" in
start)
redis_start
;;
stop)
redis_stop
;;
restart|reload)
redis_stop
sleep 0.3
redis_start
;;
*)
echo "Please use start or stop as first argument"
;;
esac
Loading…
Cancel
Save