[Linux]我的各种运维开发idea[准备实现]

作者:Ajian 发布时间:March 6, 2012 分类:管理监控维护

前言:做运维这一块如果处理的事情多了,会发现有太多的重复的事和不能人工时刻保持工作的,就必需要开发一些工具来满足需求。现在我管理的是多种异构环境而且是全球各地的各种机房,一个机房多的有七八十台服务器少的一个机房只有一两台,怎么实现统一管理,首先为异构环境制定各种统一的规范和策略,也利用了各种开源的工具,但是开源的工具很多都没有考虑异构的环境,所以不能完全满足。就需要在开源的基础上开发各种工具,甚至自己造轮子,这个时间只能在运维空闲的时间进行,主要时间都需要处理紧急的事。接下来介绍的都是准备要实现的idea。

[自动同步服务]

  • [需求]这个有点类似sersync sersync的问题是容易造成文件丢失 日志记录缺乏 重试机制弱 而且bug不少 经常会有未知的一些问题而无法排查,而且利用了rsync,配置文件管理和配置都很麻烦
  • [方案]新的自动同步服务 采用go语言 保持push模式 弥补sersync的缺点 并且实现配置文件全局统一 甚至开发出可以自动注册学习不需要管理服务器列表的添加和删除 优化传输过程 监控和查看传输过程 可以手动传输命令字传输 最终还可以加入配置管理 类似puppet的一个工具
  • [进度]现在已经实现基本的自动传输 经过上万个文件和大小文件的测试 同级server的并发还在处理 ,之后还要完善的功能有 全量推送功能 telnet命令行传送 map查看各个节点的状态 广域网传输重试机制

[邮件短信报警中心]

  • [需求]默认nagios的邮件发送都是走本地的邮件服务sendmail or postfix 缺点就是容易当成垃圾邮件 另外如果有很多个nagios的服务就要配置多个邮件服务 而且出现问题的时候排查邮件服务也是很麻烦的事 所以配置一个邮件发送中心通过smtp 队列还有重试机制可以保证邮件发送正常。短信发送是因为短信猫不能处理并发的请求容易造成短信猫故障 所以需要采用队列方式解决短信发送的问题
  • [方案]采用了python的快速开发 使用多线程队列方式 两个报警处理的过程都很类似 结构可以复用
  • [进度]现在短信的处理很稳定 但邮件处理因为采用了队列就造成了并发邮件的发送问题 下一步将优化消费进程的并发 还有短信和邮件的配置文件 改写服务启动方式 现在必需开一个screen才可以工作

[Nagios汇总页面]

  • [需求]因为Nagios默认没有分布式的支持,如果要管理和查看各个nagios的情况需要登陆各个机房的nagios,不是很直观
  • [方案]将各个nagios的状态页面进行汇总到一个html页面,对有问题项高亮红色显示,统计各个nagios的问题量进行降序排列 点击直达各个有问题的nagios页面
  • [进度]方案的主要功能全部实现 也增加了网络问题的容错显示 如果以后有时间将增加邮件提醒功能 定期发送汇总邮件 报告当时的情况 增加日志记录 绘制各个平台的趋势图

[网络状况检查]

  • [需求]因为国际网络不是很稳定,尤其是中国的出口,经常会遇到偶尔不能访问到目的地址,但是从其它国家的服务器可以跳转到目的server,所以想制作一个所有机房之间的网络状况检查,可以帮助运维有一个直观的选择
  • [进度]还没有想好使用什么语言开发,也还没有开始开发,但最后如果自动同步服务可以做得很健壮可以引入路由的自动选择功能,前期可以单独制作一个最好可以加入图形化的显示

[软件自动安装脚本]

  • [需求]如果全部靠手动安装各个服务器软件,是个很烦人的事,所以自动安装脚本,应该是最常见的开发
  • [方案]采用shell编程 之前的方案是最简单的流水命令记录加各种检查保证软件之间的安装依赖,并且非常直观和方便的日志查看和报错 缺点就是在更新单个软件版本和配置的时候比较麻烦 因为所有的软件安装都在一个脚本里面
  • [进度]之前的自动安装脚本已经工作很长一段时间了 接下来想改写的就是将各个软件安装分解 用统一的服务和函数,但一定要保持原来的显示简洁 日志记录丰富可以方便查错 增加自动配置的健壮性。

[系统日志监控]

  • [需求]当管理的服务器越来越多,服务器上的日志不可能挨个进行查看,系统的日志或者软件的日志往往提前说明了问题,这个时候如果可以主动发现这些问题 可以主动将问题扼制在萌芽状态,也可以为排查问题提供证据
  • [方案]采用python+syslog or syslog-ng+加消息队列的方式 难度就在处理统一处理各种日志 时时处理追加的日志 将日志进行合并发送
  • [进度]之前已经开发了一个版本,但是在处理大量日志上容易造成雪崩效果,引起服务器压力,发送的邮件内容也需要进行优化。

[直观的check list程序]

[code review 自动提交diff]

[nagios配置文件解析]

[ganglia监控自动更新]

[流量自动学习监控]

 

安装两个JIRA在同一台服务器方法

作者:Ajian 发布时间:October 15, 2009 分类:管理监控维护,Linux软件

前言:

虽然很多人都会说在同一台服务器上安装两个JIRA实例没有必要,因为JIRA可以设置很多的项目,并且独立的设置权限。但需要两个实例的情况也不是没有,如领导不喜欢看到其它无关的项目,完全不同的部门不想共用同一个等。这种需求肯定是有的,我就碰到了啊。只要有一定经验的人都会安装过这种类似的多个实例在同台服务器的情况,但每种软件的方法总会有特殊的一些地方。下面大概的介绍下安装方法。

注意事项:

在安装JIRA之前先做个说明

1、安装JIRA的过程 参考Linux JIRA+MYSQL安装与调试方法

2、本次安装的版本是 atlassian-jira-enterprise-3.13.5-standalone
其实在安装这个版本的时候 jira 4.0已经出来了,并且尝试了很久但都是以失败告终,jira 4 有两大难点,第一个是Jira的license 升级后很多不能用,网上也没有新的破解方法,要短时间内搞出来不容易;第二个就是域名代理会出问题 即直接用80域名端口访问的时候(放在apache 或者nginx 后面) 新的jira 首页设计成Gadgets的方式,而这个URL是相对的会因为代理的问题导致不能得到正确的URL地址 现在官网只有apache的解决办法,很不幸我用的是nginx ,所以实验没有成功 ,具体方法见官网 Gadgets do not display correctly after upgrade to JIRA 4.0

安装原理:

借人别人的话

* all app server ports are unique for each JIRA instance
* separate context paths in your jira.xml file
* each JIRA instance points to a unique database
* each JIRA instance points to a unique index directory
* each JIRA instance points to a unique attachment directory

所有的端口、目录、数据库、附件、索引目录都需要独立。

安装过程:

1、新的jira按第一个jira的安装方法进行 参考 Linux JIRA+MYSQL安装与调试方法

2、创建新的数据库,并且设置权限

3、配置区别一、更换下面jiradb为新的数据库

url="jdbc:mysql://localhost/jiradb? autoReconnect=true&useUnicode=true&characterEncoding=UTF8"

4、配置区别二、设置不同的端口

设置的有一个服务端口、一个连接端口、一个服务实例名称、一个引擎名称(其实不太了解Engine name 有知道的告诉我下 平时都是搞PHP环境的)(以下代码不可复制,编辑器把一些字符转成全角了)

<Server port="8006" shutdown="SHUTDOWN">

<Service name="NewJIRA">

<Connector port="8888"

maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" useBodyEncodingForURI="true"

enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />

<Engine name="NewJIRA" defaultHost="localhost">

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

5、配置区别三、这个区别主要是针对jira 4.0的

其实如果不配置域名的反向代理,jira 4.0也是可以正常配置在同一台服务器上的。

1)JIRA 4.0的安装比较严格些,在WEB配置的时候会必需填写附件、索引路径
2)需要设置jira.home  编辑./atlassian-jira/WEB-INF/classes/jira-application.properties 把jira.home的目录更改到新的jira目录(3.X版本都是没有这个jira.home)

如何设置jira.home 还有解jira.home的锁 lock 请参考官网的方法 Setting your JIRA Home Directory

------------------------------------------

以上配置就已经通过不同的端口来访问JIRA了

6、反向代理域名访问方法设置

原理:WEB软件上设置将虚拟主机的80端口转到后端的jira端口,通过虚拟主机来访问

这里只说Nginx Apache的网上搜搜到处都是。

1)nginx.conf 设置代理

upstream jira {
server 127.0.0.1:8080;
}
upstream newjira{
server  127.0.0.1:8888;
}

2)vhost.conf 设置虚拟主机

server {
listen 80;
server_name renwu.com www.renwu.com *.renwu.com;
charset utf-8;

location / {
index index.jsp index.html index.htm;
proxy_pass http://jira;
}
}

server {
listen 80;
server_name renwu2.com www.renwu2.com *.renwu2.com;
charset utf-8;
location / {
index index.jsp index.html index.htm;
proxy_pass http://newjira;
}
}

(END)

注意结合 Linux JIRA+MYSQL安装与调试方法 来配置

Shell统计隐藏目录的大小方法小记

作者:Ajian 发布时间:August 17, 2009 分类:管理监控维护,Shell

前言:今天df看到磁盘快满了,通过查看发现很多都是隐藏文件的,但是通过du又查不到隐藏目录的大小 不知道 哪些目录太大?怎么查看方便呢?

所以写了个脚本进行统计

脚本的功能,打印出指定目录下的一级目录所有隐藏目录的大小并且按M进行排序

#!/bin/bash
#Author:Ajian
#Date   : 2009-08-17
#website:www.ohlinux.com
for i in `find $DOCUMENT -maxdepth 1 -name ".*"  -type d -print `
do
  du -sm $i
done | sort -n | awk '{print $1"M"," ",$2}'

后来我又减化了下到一个命令

find /root -maxdepth 1 -name ".*"  -type d -print | xargs du -sm | sort -n | awk '{print $1"M",$2}'

解説:
1、查找隐藏目录 使用find /path -name ".*" -type d -print
2、查找一级的隐藏目录添加上 -maxdepth 1
3、对目录进行以M兆的统计 du -sm
4、对大小进行排序 默认以第一列 sort -nr (r是反向排序)
5、awk 在这里进行修饰了下因为du -sm 是没有显示单位的 用du -sh 有单位但增加了排序的麻烦
6、脚本和命令的书写区别 因为脚本用的for 语句是分条读入的所以如果把sort -n | awk '{print $1"M"," ",$2}' 放到 du -sm $i 之后不会对顺序产生变化,因为每次就对一条进行排序肯定最后的结果是没有影响的 而命令是用管道的方式 每次都是一批处理完后交给后面进行 注意脚本和命令的区别。

结果:

13M   /root/.opera
13M   /root/.svnqt
15M   /root/.cpan
16M   /root/.mplayer
78M   /root/.tencent
100M   /root/.config
116M   /root/.VirtualBox
158M   /root/.icons
160M   /root/.google
218M   /root/.kde4
258M   /root/.mozilla
517M   /root/.thumbnails
650M   /root/.beagle

Nagios插件编写及调试方法(个人经验版)

作者:Ajian 发布时间:July 29, 2009 分类:管理监控维护

前言:Nagios是相当不错的监控工具,被称作是“监控之神”,但同样也有“难搞死”头衔。发挥Nagios一切魅力的都是他的插件,正因为丰富多样的插件让nagios有血有肉。监控的内容不断在变化,插件也不断变化,默认的一些插件可能越来越不能满足需求,这个时候就要自己来写些插件了。

以下就是用我的第一个Nagios插件来说明编写方法和我遇到一些问题调试方法。如果你有耐心可以通篇看完,应该对第一次写的人来说会有很大帮助(如果你看不懂,可能是我写得不清楚 那就没办法了 表达能力有限)

需求:

监控普通磁盘的健康状况(普通磁盘以外还有RAID、阵列的监控是不同方法来做的,这里先不讨论,先从最简单的入手),定期进行检测,并进行报警,报警内容磁盘是否正常,不正常是什么状态。

分析编写过程:

我写脚本的前提都是先从手动成功完成,再到自动化(我想其它人的思路应该都一样的)

1、找到监控磁盘的方法
通过一番查找 smartctl 这个命令是比较不错的  centos slackware一般的默认都有这个
smartctl -H /dev/sda  只检测状态
smartctl -i /dev/sda   只检测硬盘信息
smartctl -a /dev/sda 检测所有信息

2、获取检测信息
# smartctl -H /dev/sda
smartctl version 5.38 [x86_64-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

SMART Health Status: OK

关键的最后一行说明磁盘的情况       截取  DISK_HEALTH=`smartctl -H /dev/sda | tail -1 | cut -d: -f2-  `

3、 进行关键判断
据我所知道的 smartctl 5.38  是出以上的結果 为OK
而 smartctl 5.39 是出以下結果
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
关键词是PASSED
所以要分析判断多种情况

4、脚本编写步骤

1)了解nagios插件编写规范

Nagios的插件可以用脚本(shell、Perl)C编译后的可执行程序,但必须满足以下两件事:

A、既出时有一个返回值
B、至少向标准输出设备(STDOUT)输出一行文件。(但也不能太大,默认是4K,如果想大些,修改源程序吧,方法搜。。。)

返回值定义:
Plugin Return Code
Service State
DISK State
0
OK
OK 或者PASSED
1
WARNING
插件警告  DISK报警只分OK或者CRITICAL
2
CRITICAL
DISK检测非OK 或者PASSED
3
UNKNOWN
未知状态

2)插件编写SHELL速成法

在这里我选用我最熟悉的SHELL进行脚本编写 ,

我的速成法就是,直接去nagios exchange 去下比较成熟的比较简单的shell脚本,这样会从一开始借鉴别人好的方法,养成好的习惯,而且只要你有一点SHELL编程经验也可以很快写得像一个老手。(不过不要把自己搞晕了就行)

3)以下是我的check_disk_health.sh

#!/bin/bash
# ========================================================================================
# disk health  plugin for Nagios
#
# Written by    : Ajian
# Release       : 1.2.0
# Creation date : 2009-07-28
# Revision date : 2009-07-30
# Description   : Nagios plugin (script) to check disk health .
#               This script has been designed and written on Linux System.
#
# USAGE         : ./check_disk_health.sh [-d (disk)]
#
# Exemple: ./check_cpu_stats.sh
#          ./check_cpu_stats.sh -d /dev/sda
#
#
# HISTORY :
#     Release   |     Date      |    Authors            |       Description
# --------------+---------------+----------------------+-----------------------------------
#  1.0.0        | 2009-07-28     | Ajian                | Create the script
#  1.2.0        | 2009-07-30    |  Ajian                | modify the script and run well ,fix a bug.
# -----------------------------------------------------------------------------------------
# NOTICE:
#-----------------------------------------------------------------------------------------
#     You should have the root Permissions ,You can use sudo to realize .
# -----------------------------------------------------------------------------------------                                   

# Nagios return codes
#定义 nagios返回的状态变量
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3      

# Paths to commands used in this script.  These may have to be modified to match your system setup.
# 定义关键的核心命令smartctl 路径 如果你的系统不是这个地址,请更改。 以下注释的是调试的信息,是自动获取命令路径的方法。
SMARTCTL="/usr/sbin/smartctl"
#SMARTCTL=`which smartctl`
#if [ $? -ne 0 ]; then
#        echo " smartctl is found in $SMARTCTL ; Go on ... "
#        echo "smartctl the command cannot find"
#        exit $STATE_UNKNOWN
#fi
# Plugin parameters value if not define
# 定义默认的检测硬盘
CHECK_DISK="/dev/sda"                  

# Plugin variable description
# 插件描述信息
PROGNAME=$(basename $0)
RELEASE="Revision 1.2.0"
AUTHOR="(c) 2009 Ajian (ajian521@gmail.com)"

# Functions plugin usage
# 插件的使用方法函数
print_release() {
    echo "$RELEASE $AUTHOR"
}                          

print_usage() {
        echo ""
        echo "$PROGNAME $RELEASE - Disk health check script for Nagios"
        echo ""
        echo "Usage: check_disk_health.sh -d /dev/sdb"
        echo ""
        echo "  -d  the disk (/dev/sda) "
        echo "          not the Hard disk partition(sda2 is wrong)"
        echo "  -v  check the version"
        echo "  -h  Show this page"
        echo ""
    echo "Usage: $PROGNAME"
    echo "Usage: $PROGNAME --help"
    echo ""
    exit 0
}                                                                                                          

print_help() {
        print_usage
        echo ""
        echo "This plugin will check disk health  "
        echo ""
        exit 0
}                                                  

# Parse parameters
# 传递参数
while [ $# -gt 0 ]; do
    case "$1" in
        -h | --help)
            print_help
            exit $STATE_OK
            ;;
        -v | --version)
                print_release
                exit $STATE_OK
                ;;
        -d | --disk)
                shift
                CHECK_DISK=$1
                #判断磁盘是否存在
                if [ ! -b $CHECK_DISK ];then
                        echo "$CHECK_DISK is no exsit,Please change it "
                        exit $STATE_CRITICAL
                fi
                ;;
        *)  echo "Unknown argument: $1"
            print_usage
            exit $STATE_UNKNOWN
            ;;
        esac
shift
done

#根据不同的操作进行不同的操作,这里暂时只支持Linux
case `uname` in
        Linux )
             #最核心的部分 前面都是些脚本的基本功能 一个框架 因为第一个脚本牵扯到了很多东西,虽然功能很简单,
             #但折腾了我不少,在后面的分析中会具体说到 总之注意sudo用法 脚本一开始就有说哦
                DISK_HEALTH=`$SMARTCTL  -H $CHECK_DISK | tail -1 | cut -d: -f2- `
                #DISK_HEALTH="OK"
        #       DISK_INFO=`/usr/bin/sudo $SMARTCTL -i $CHECK_DISK | grep "Device:"`
                if [ "$DISK_HEALTH" = " OK" ]|| [  "$DISK_HEALTH" = " PASSED" ];then
                        echo "OK - $CHECK_DISK status is $DISK_HEALTH "
                        #echo "OK - $CHECK_DISK status is $DISK_HEALTH | $DISK_INFO"
                        exit $STATE_OK
                else
                        echo "CRITICAL - $CHECK_DISK status is $DISK_HEALTH "
                        #echo "CRITICAL - $CHECK_DISK status is $DISK_HEALTH | $DISK_INFO"
                        exit $STATE_CRITICAL
        fi
            ;;

        *)              echo "UNKNOWN: `uname` not yet supported by this plugin. Coming soon !"
                        exit $STATE_UNKNOWN
            ;;
        esac

4)运行脚本

(注意:在最开始自己写的脚本是没有sudo的,以上脚本是已经调试过后的,还需要配置一些其它的东西,慢慢看吧)
给与脚本执行权限,手动执行

# ./check_disk_health.sh
OK - /dev/sda status is  OK

結果正确了,其实这个时候,高兴得太早了。 我先不说问题、继续正常的一般流程。

5、配置Nagios 调用插件

1)在远程NRPE 被监控服务器上修改nrpe.conf
# vim /usr/local/nagios/etc/nrpe.cfg
添加 command[check_sda_health]=/usr/local/nagios/libexec/check_disk_health.sh -d /dev/sda
(注意这里了,先提醒下,这里是错误的,一般是正确的,是这个脚本的特殊性造成的)

2)在Nagios 监控服务器上添加一些配置

定义服务

define service{
use                             Disk-Health
host_name                       DB-56
servicegroups                   Disk-Health
service_description            check sda disk health
contact_groups                  admins
check_command               check_nrpe!check_sda_health
}
如果像上面定义一个服务 那么就要注意相关的定义了 ,
定义Disk-Health 模版  把硬盘检测定义一个模版会比较好控制,因为硬盘的检测不像其它服务一样需要准确的及时性反正检测得太多可能会造成压力,一般一天检测几次就够了。
定义DB-56 主机需要定义
定义组 admins
以上这些只要安装过nagios 一般都知道的了 只是强调下模版的单独定义

3)通过WEB控制检测 查看結果

結果是失败 报警CRITCTL 但是状态里面的信息都是空的  CRITCTL - /dev/sda status is

6、调试

从Nagios的远程监控来看是失败的,并且没有获取到任务有用的信息。

分析可以看到,说明nrpe调用  这个变量获取到的是为空的信息
DISK_HEALTH=`$SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
即是空的 只有一个原因,肯定是没有执行 如果执行了 肯定会有字段 不管这个字段是否相符。
但是手动执行是没有问题。
经过对smartctl的查看 原来这个命令是只允许root进行调用的。
现在需要解决的问题是:非root 用户 如何远程调用含有需要有root权限命令的脚本进行监控。
(不要小看这一句话,每一个词都是一个需要攻克的地方)
以下是调试步骤:
1)非root用户
NRPE插件是用nagios这个用户来执行的 所以要得到真实的情况需要
A: su nagios   再执行脚本 (这个方法比较好)
B: sudo -u nagios ./check_disk_health.sh
結果:

sudo -u nagios ./check_disk_health.sh
CRITICAL - /dev/sda status is
跟远程的結果是一样的了 没有信息
2)需要有root权限
需要root权限只有一个办法就是用sudo
将DISK_HEALTH=`$SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
改为DISK_HEALTH=`/usr/bin/sudo $SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
(最后发现这时加sudo 并不是关键 关键是很行脚本时用sudo )
結果:sudo -u nagios ./check_disk_health.sh
Password:
需要输入密码  sudo不用输入密码的方法
修改sudo配置文件
执行 visudo
添加
nagios ALL=(ALL) NOPASSWD:/usr/local/nagios/libexec/check_disk_health.sh
建议:最好进行sudo的一些控制,很多网方法就是nagios ALL=NOPASSWD:ALL
结果:
su nagios
/usr/bin/sudo check_disk_health.sh
OK - /dev/sda status is OK
那么在nrpe.conf配置文件中需要添加sudo
command[check_sda_health]=/usr/bin/sudo /usr/local/nagios/libexec/check_disk_health.sh
最开始那个是错误的 注意啊 这个是需要添加/usr/bin/sudo 就是说只要脚本中涉及到提升到root权限的命令那么就要用这个
3)远程调用
远程调用方法:./check_nrpe -H 192.168.0.56 -c check_sda_health
同上如果想模拟真实环境请切换到相应的执行用户 su nagios 再执行以上操作
结果:   NRPE: Unable to read output
这个错误的原因一定要明白,之所以报这个错意思是说NRPE没有获取到任何信息,也说是写脚本之前说的其中第二条规范
问题:在没有任何信息的情况下怎么来获取NRPE执行的日志呢
就是要确定问题在哪,经过一大番的查找眼睛偶尔看到一个有趣的小方法
修复nrpe.conf配置文件 在要检查的命令后面添加>>/tmp/output 2>&1 将错误导出到文件中进行查看
command[check_sda_health]=/usr/bin/sudo /usr/local/nagios/libexec/check_disk_health.sh -d /dev/sda >>/tmp/output 2>&1
重记nrpe服务
远程调用 结果当然还是NRPE: Unable to read output
查看/tmp/output
sudo: sorry, you must have a tty to run sudo
有错误就简单了  原来这个是默认不允许sudo 在后端进行
visudo
注释Defaults requiretty 就OK了
结果通过WEB查看也正确了。
(注意:注释后 检测仍然会是Unable 不过看/tmp/output就会有正确的結果,所以有正确的結果后,一定要去掉 >>/tmp/outpt 2>&1 信息都导到文件中了 nagios还是得不到任何消息。)

一个脚本执行成功后,就是大批量应用,用生产环境验证,出现问题继续调试。

以上为所有的分析调试方法。如果你看到最后一步了,说明你很有耐心,你也一定会成功的,至于写得好与坏、对与错请尽管说,这不会影响你的成功。呵呵。

JIRA升级小记方法一则

作者:Ajian 发布时间:July 28, 2009 分类:管理监控维护,Linux软件

前言:  上次刚安装完JIRA 13.4没两天 JIRA又升级到13.5了,都想用最新的,而且同事说汉化得不好,想看看新的版本,正好之前的JIRA还没有怎么用,那就开始折腾他。升级吧。

升级要求:

虽然数据不多,但尽量保存数据,再花那么久时间去创建用户项目也是个麻烦的事。(不过我是抱着折腾的想法去做的,因为没有太重要的数据,数据不丢失当然是最好,結果当然是一切顺利,数据完好)

升级软件:

atlassian-jira-enterprise-3.13.4-standalone升级到atlassian-jira-enterprise-3.13.5-standalone

升级步骤:

注意:要继续下面的请先参考我的之前的JIRA安装“Linux JIRA+MYSQL安装与调试方法

第一步:下载3.13.5

到官网下载就行了,之前那篇文章有。

其实在下载的页面可以看到 install guide 和upgrade guide 完全可以参考上面的,也是比较詳細了,不过我看了一眼就觉得太麻烦了,其实可以简化很多的。

http://www.atlassian.com/software/jira/docs/latest/upgrading.html

第二步:解压并同步一些文件

安装文章里有这个配置 ln -s atlassian-jira-enterprise-3.13.4-standalone jira

这个方法其实很方便尤其在更新的时候

tar zxvf atlassian-jira-enterprise-3.13.5-standalone.tar.gzrm jiraln -s atlassian-jira-enterprise-3.13.5-standalone jira

同步MYSQL/JDBC驱动

cpatlassian-jira-enterprise-3.13.4/common/lib/mysql-connector-java-5.0.8-bin.jar  atlassian-jira-enterprise-3.13.5/common/lib/

同步 WEB相关的文件 如附件等

cp -r atlassian-jira-enterprise-3.13.4-standalone/website/*  jira/website/

website下面的如果不同步,会出现一些内容丢失、是在系统日志中查看到的,会找不到东西。

第三步:再一次修改JIRA配置

这个是跟原来安装文档中一样的修改两个配置文件。

第四步:安全保险,备份JIRA数据库

这样WEB程序和数据库都不少,如果出错还有后退的余地。

第五步:删除原来的jira进程,重启startup.sh

起来后使用tail -f jira/logs/catalina.out  查看错误,如还有其它问题首先检查上面的是否都注意做了,有新的问题google.

如果按之前我的那篇文章安装的,又用这篇文章进行的升级,应该是没有问题了,我的一气哈成,都是看日志进行的调试。

JIRA操作小记录:

1、所有的配置在管理里都是可以修改的 ,如组的权限 报告问题的类型英文改中文或者添加等等(所以之前同事说的大部分英文问题都可以解决了)

2、登陆名最好用英文 如果是中文创建和使用都没有问题 就是在删除的时候会报ava.lang.UnsupportedOperationException: Could not remove user: ??? to group: jira-developers

显然是对中文支持的不好,暂时没有解决。我看还是用英文吧。

3、建立好了用户不要经常删除重建,会有很多关联的东西,可能会比较麻烦哦。

暂时这些(END)