这篇文章,主要是接着上次的redmine部署的,文章主要包含两部分,redmine的启动脚本和监控脚本

redmine启动脚本

#!/bin/bash

#redmine   Startup script for the redmine server
#chkconfig:  - 85 15

Prog=redmine
Prog_dir=/data/redmine

#find the redmine's pid
Pid=`ps aux | grep "\<$Prog\>" | pidof ruby`

ProgPort=3000
ReturnCode=`ss -tlnp | grep "\<$ProgPort\>" &> /dev/null;echo $?`

start() {
        if [ $ReturnCode -eq 0 ] &> /dev/null;then
            echo " Redmine is Already Running !!! "
        else
            cd $Prog_dir
            ruby redmine/script/rails server webrick -e production -d &> /dev/null
            echo -e "Starting redmine ..... \e[32m[ OK ]\e[m"
        fi
}

stop() {
        if [ $ReturnCode  -ne 0 ] &> /dev/null;then
            echo " Redmine is Already  Stopped !!!"     
        else
            kill  -9  $Pid
            echo -e "Stopping redmine ..... \e[32m[ OK ]\e[m"
        fi
}

status() {
        if [ $ReturnCode -eq 0 ] &> /dev/null;then
            echo " Redmine is Running !!! "
        else
            echo " Redmine is Stopped !!! "
        fi
}

case "$1"  in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status
        ;;
    restart)
        stop
        start
        ;;
        *)
        echo "Usage: $Prog {start|stop|status|restart}"
esac

注意:使用启动脚本时,用户必须是有ruby环境的用户,假设,我是使用dev用户部署的redmine,如果使用root去启动redmine,会启动失败,因为root没有ruby的环境


redmine的监控脚本

#!/bin/bash
#this script in order to check the redmine , if it down ,make it start
#date : 2015/1/9
#notice : any questions send mail to [email protected]

#rvm environment
source ~/.bashrc
source ~/.bash_profile

#change to redmine's directoy
RedmineDir=/data/redmine/
cd $RedmineDir

[ -d logs ] || mkdir logs

#this redmine is listen on 3000
ListenPort=3000
ReturnCode=`ss -tlnp | grep "\<$ListenPort\>" &> /dev/null ; echo $?`

#check the redmine and, add message to logs,located in /data/redmine/logs
if [ $ReturnCode -eq 0 ];then
    echo -e "\e[32mtime: `date +%F-%T`\e[m" >> logs/access.log
    echo -e "\e[35mredmine is running.\e[m" >> logs/access.log
else
    /etc/init.d/redmine restart
    echo -e "\e[32mtime: `date +%F-%T`\e[m">> logs/error.log
    echo -e "\e[31mredmine is down to running.\e[m" >> logs/error.log
fi

#now check the log file size,delete the file which is larger then 100MB
cd ${RemineDir}logs
for file in access.log error.log
do
    Size=`ls -l $file | awk -F" " '{print $5}'`
    if (( $Size >= 102400 ));then
        > $file
    fi
done


将监控脚本加入到任务计划中去

dev@mon1:~$ crontab -e */10 * * * * /bin/bash /home/dev/scripts/redmine.sh &> /dev/null