Ubuntu下redmine搭建及优化

搭建服务器

前公司一直用的JIRA,现在换公司了,规模没有那么大,对于项目BUG的管理没有那么完善,一直用的BUGFREE,最近公司来了个项目总监,想和大公司规范一样,需要搭建redmine的项目管理服务器,小公司嘛没什么人,只有找我们这Android系统工程师来看看,最后这个任务就落到我头上了,刚开始对于服务器的搭建没什么头绪,慢慢从网上找到了解决办法,

  • 一开始以为搭建很是困难,原来是下载别人软件直接运行就OK了,搭建起来很简单 https://bitnami.com/stack/redmine/installer网址下载安装运行即可,困难的是后面的维护,这软件又不是我写的,对于会出什么差错当然就是找我这个搭建人的问题了,于是就开始对于这个redmine进行优化。

端口开放问题

通过同局域网内IP和端口访问,果然第二天出现一个问题,不能访问,重启服务器之后只能本机访问,通过ping能够访问到服务器,但是telnet链接端口超时,于是就怀疑是服务器端口的问题,

 sudo iptables -I INPUT -p tcp --dport 8081 -j ACCEPT

通过上面这个命令开放redmine服务器端口8081,到这问题就解决了,但是过了一天又遇到类似的情况,服务器电脑我不知道重启没有重启,通过ssh链接服务器用脚本查看./ctlscript.sh status,redmine是已经运行的,结果如下:

subversion already running
apache already running
mysql already running

但就是访问不了(除了本地访问),重启redmine服务器再次进行访问,然而还是没有效果;再次运行开放端口命令,恢复正常。于是自己想着在启动的脚本上做一些手脚,自己就对ctlscript.sh这个shell脚本看了看,既然重启redmine服务器没有开放端口,那就在脚本启动后插入开放端口的命令,省得我们每次启动服务器时都要自己开放一次端口。

APACHE_SCRIPT=$INSTALLDIR/apache2/scripts/ctl.sh
...
elif [ "x$2" = "xapache" ]; then
    if test -x $APACHE_SCRIPT; then
        $APACHE_SCRIPT start
        APACHE_ERROR=$?
    fi
elif

脚本中有大部分类似上面片段这种的,上面片段脚本可知,真正启动服务器脚本是$INSTALLDIR/apache2/scripts/ctl.sh这个路径。跟踪到这个脚本,也不许看别的地方

    start_apache() {
    test_apache_config
    is_apache_runniredmineng
    RUNNING=$?

    if [ $RUNNING -eq 1 ]; then
    echo "$0 $ARG: httpd (pid $HTTPD_PID) already running"
    else
    cleanpid
    if $HTTPD ; then
        echo "$0 $ARG: httpd started at port 8080"
        +echo '123' | sudo -S iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
        +echo "8080 accept"
    else
        echo "$0 $ARG: httpd could not be started"
        ERROR=3
    fi
    fi
}

+号后面是自己添加的,成功启动之后开放端口并且打印信息在终端上,这样每次启动的时候应该就可以顺带端口一起开放了

开机自启动

自己也优化了一下,每次开机的时候无需去自己启动redmine服务器脚本,网上也搜索了很多类似的方案,之后就决定用crontab这种方法,之前也研究看了看。

于是自己就新建了redmine.cron文件

@reboot nohup /home/tao/redmine-3.4.6-1/ctlscript.sh start >> /home/tao/crontablist/reboot.log 2>&1 &

crontab redmine.cron 添加方案,通过crontab -l 查询,然后重启自行去验证一下,log以及服务器的状态

检测服务器端口

进一步优化,自己写了个Python脚本利用crontab来定时的检测redmine服务器是否正在运行以及端口是否开放问题。

  • autotest.py
##!/usr/bin/python
# -*- coding: UTF-8 -*-
import os,sys,ConfigParser,telnetlib,time
#import socket
print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
#redmine目录
redminePath = os.path.dirname(os.path.abspath(__file__))
redmineShell = redminePath + '/ctlscript.sh'
##shell 命令行
checkCmd = redmineShell + ' status'
stopCmd = redmineShell + ' stop'
restartCmd = redmineShell + ' restart'
fail = 'echo redmine服务器启动失败'
#checkPort = 'telnet 127.0.0.1 port'
openPort = "echo '123' | sudo -S iptables -I INPUT -p tcp --dport port_id -j ACCEPT"

#Shell命令工具
class ShellUtils:
    def __init__(self):
        print "ShellUtils构造函数"
    @classmethod
    def getStrOut(cls,cmd):
        f = os.popen(checkCmd,'r')
        strout = f.read()
        f.close()
        return strout
    @classmethod
    def execute(cls,cmd):
        id = os.system(cmd)
        return id

#配置文件工具类
class ConfigUtils:
    def __init__(self):
        pass
    def addConfigParser(self,filename):
        self.config = ConfigParser.ConfigParser()
        self.config.read(filename)
    def getValue(self,section,option):
        return self.config.get(section,option)

#测试端口是否开放
def testconn( host , port ):
    #sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #sk.settimeout(1)
    server = telnetlib.Telnet()
    try:
        #sk.connect((host,port))
        server.open(host,port)
        return 1
    except Exception:
        return 0
    finally:
        server.close()
        #sk.close()

#实例配置文件工具类
configUtils = ConfigUtils()
configUtils.addConfigParser(redmineShell + '/properties.ini')
#执行redmine检测脚本
strOut = ShellUtils.getStrOut(checkCmd)

#判断脚本每行输出内容
for line in strOut.splitlines(False):
    if "not running" in line:#某一服务器没有运行
        startid = ShellUtils.execute(restartCmd)
        break
    else:
        port = 0
        if "subversion" in line: #subversion服务器运行,从配置文件中取得其端口号
            port = configUtils.getValue("Subversion","subversion_port")
        elif "apache" in line:
            port = configUtils.getValue("Apache","apache_server_port")
        elif "mysql" in line:
            port = configUtils.getValue("MySQL","mysql_port")
        test_id = testconn("127.0.0.1",port)
        if test_id == 0:
            #打开
            ShellUtils.execute(openPort.replace("port_id",port))
        elif test_id == 1:
            print ('端口{0}已经是开放状态'.format(port))

该脚本放在/home/tao/redmine-3.4.6-1服务器目录下,脚本逻辑很简单

1、执行检测脚本,如没有运行则开启服务器
2、如已经在运行,则检测服务器中端口

其中还有读取配置文件properties.ini获取启动的三个服务端口号,以及python中检测端口的接口,本来想通过“telnet 127.0.0.1 port”命令来检测端口情况的,心想既然用python脚本编写,不想那么“shell化”。其中python语言检测脚本网上查了下可以有两种方法,上面代码中都有。

然后就类似重启的优化,在redmine.cron文件中添加:

*/10 * * * * python /home/tao/redmine-3.4.6-1/autotest.py >> /home/tao/crontablist/autotest.log 2>&1 &

意思是每10分钟执行一次autotest.py脚本。crontab redmine.cron添加方案 。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352