Ubuntu下redmine搭建及優(yōu)化

搭建服務(wù)器

前公司一直用的JIRA估脆,現(xiàn)在換公司了,規(guī)模沒有那么大座云,對于項目BUG的管理沒有那么完善疙赠,一直用的BUGFREE,最近公司來了個項目總監(jiān)朦拖,想和大公司規(guī)范一樣圃阳,需要搭建redmine的項目管理服務(wù)器,小公司嘛沒什么人璧帝,只有找我們這Android系統(tǒng)工程師來看看捍岳,最后這個任務(wù)就落到我頭上了,剛開始對于服務(wù)器的搭建沒什么頭緒裸弦,慢慢從網(wǎng)上找到了解決辦法祟同,

  • 一開始以為搭建很是困難,原來是下載別人軟件直接運行就OK了理疙,搭建起來很簡單 https://bitnami.com/stack/redmine/installer網(wǎng)址下載安裝運行即可晕城,困難的是后面的維護(hù),這軟件又不是我寫的窖贤,對于會出什么差錯當(dāng)然就是找我這個搭建人的問題了砖顷,于是就開始對于這個redmine進(jìn)行優(yōu)化。

端口開放問題

通過同局域網(wǎng)內(nèi)IP和端口訪問赃梧,果然第二天出現(xiàn)一個問題滤蝠,不能訪問,重啟服務(wù)器之后只能本機(jī)訪問授嘀,通過ping能夠訪問到服務(wù)器物咳,但是telnet鏈接端口超時,于是就懷疑是服務(wù)器端口的問題蹄皱,

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

通過上面這個命令開放redmine服務(wù)器端口8081览闰,到這問題就解決了,但是過了一天又遇到類似的情況巷折,服務(wù)器電腦我不知道重啟沒有重啟压鉴,通過ssh鏈接服務(wù)器用腳本查看./ctlscript.sh status,redmine是已經(jīng)運行的锻拘,結(jié)果如下:

subversion already running
apache already running
mysql already running

但就是訪問不了(除了本地訪問)油吭,重啟redmine服務(wù)器再次進(jìn)行訪問击蹲,然而還是沒有效果;再次運行開放端口命令婉宰,恢復(fù)正常歌豺。于是自己想著在啟動的腳本上做一些手腳,自己就對ctlscript.sh這個shell腳本看了看心包,既然重啟redmine服務(wù)器沒有開放端口世曾,那就在腳本啟動后插入開放端口的命令,省得我們每次啟動服務(wù)器時都要自己開放一次端口谴咸。

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

腳本中有大部分類似上面片段這種的,上面片段腳本可知骗露,真正啟動服務(wù)器腳本是$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
}

+號后面是自己添加的萧锉,成功啟動之后開放端口并且打印信息在終端上珊随,這樣每次啟動的時候應(yīng)該就可以順帶端口一起開放了

開機(jī)自啟動

自己也優(yōu)化了一下,每次開機(jī)的時候無需去自己啟動redmine服務(wù)器腳本柿隙,網(wǎng)上也搜索了很多類似的方案叶洞,之后就決定用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以及服務(wù)器的狀態(tài)

檢測服務(wù)器端口

進(jìn)一步優(yōu)化艺晴,自己寫了個Python腳本利用crontab來定時的檢測redmine服務(wù)器是否正在運行以及端口是否開放問題。

  • 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服務(wù)器啟動失敗'
#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構(gòu)造函數(shù)"
    @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')
#執(zhí)行redmine檢測腳本
strOut = ShellUtils.getStrOut(checkCmd)

#判斷腳本每行輸出內(nèi)容
for line in strOut.splitlines(False):
    if "not running" in line:#某一服務(wù)器沒有運行
        startid = ShellUtils.execute(restartCmd)
        break
    else:
        port = 0
        if "subversion" in line: #subversion服務(wù)器運行掸屡,從配置文件中取得其端口號
            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}已經(jīng)是開放狀態(tài)'.format(port))

該腳本放在/home/tao/redmine-3.4.6-1服務(wù)器目錄下封寞,腳本邏輯很簡單

1、執(zhí)行檢測腳本仅财,如沒有運行則開啟服務(wù)器
2狈究、如已經(jīng)在運行,則檢測服務(wù)器中端口

其中還有讀取配置文件properties.ini獲取啟動的三個服務(wù)端口號盏求,以及python中檢測端口的接口抖锥,本來想通過“telnet 127.0.0.1 port”命令來檢測端口情況的,心想既然用python腳本編寫风喇,不想那么“shell化”宁改。其中python語言檢測腳本網(wǎng)上查了下可以有兩種方法,上面代碼中都有魂莫。

然后就類似重啟的優(yōu)化还蹲,在redmine.cron文件中添加:

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

意思是每10分鐘執(zhí)行一次autotest.py腳本。crontab redmine.cron添加方案 。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谜喊,一起剝皮案震驚了整個濱河市潭兽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斗遏,老刑警劉巖山卦,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诵次,居然都是意外死亡账蓉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門逾一,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铸本,“玉大人,你說我怎么就攤上這事遵堵∠溏瑁” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵陌宿,是天一觀的道長锡足。 經(jīng)常有香客問我,道長壳坪,這世上最難降的妖魔是什么舶得? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮爽蝴,結(jié)果婚禮上扩灯,老公的妹妹穿的比我還像新娘。我一直安慰自己霜瘪,他們只是感情好珠插,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颖对,像睡著了一般捻撑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缤底,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天顾患,我揣著相機(jī)與錄音,去河邊找鬼个唧。 笑死江解,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的徙歼。 我是一名探鬼主播犁河,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼鳖枕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桨螺?” 一聲冷哼從身側(cè)響起宾符,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎灭翔,沒想到半個月后魏烫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡肝箱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年哄褒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煌张。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡读处,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唱矛,到底是詐尸還是另有隱情,我是刑警寧澤井辜,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布绎谦,位于F島的核電站,受9級特大地震影響粥脚,放射性物質(zhì)發(fā)生泄漏窃肠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一刷允、第九天 我趴在偏房一處隱蔽的房頂上張望冤留。 院中可真熱鬧,春花似錦树灶、人聲如沸纤怒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泊窘。三九已至,卻和暖如春像寒,著一層夾襖步出監(jiān)牢的瞬間烘豹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工诺祸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留携悯,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓筷笨,卻偏偏與公主長得像憔鬼,于是被迫代替她去往敵國和親龟劲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348