Pentaho的linux的自动启动脚本

为了更好监听pentaho server服务编写自动启动脚本,其目的是:

1. 运行stop-pentaho.sh脚本停止pentaho server后有的进程号还没完全关闭,本脚本在启动server前会把之前的server进程kill掉

2. 当server因未知因素挂掉时,本自动脚本会自动重启server

下面这段脚本是判断是否还有未停止的pentaho server进程,如果有则kill掉,并启动pentaho server


#!/bin/sh
pid=`ps -ef | grep pentaho-server| grep -v grep| awk '{print $2}'`

for id in $pid
  do
        kill -9 $id
        pid=`ps -ef | grep pentaho-server| grep -v grep| awk '{print $2}'`
        echo $id
        sleep 1
  done

echo "Pentaho server have been stoped!"


sh   /data/pentaho/Pentaho/server/pentaho-server/clear_cache.sh

echo -e "************************\n\n\n\n\n"

echo  "Pentaho server has been started now!"

echo -e "************************\n\n\n\n\n"

sleep 5

sh  /data/pentaho/Pentaho/server/pentaho-server/start-pentaho.sh

echo "Pentaho server have been started at" $(date "+%Y-%m-%d %H:%M:%S")"!">>/data/pentaho/pentaho-server/temp2.txt


tailf /data/pentaho/Pentaho/server/pentaho-server/tomcat/logs/catalina.out

优化后的脚本判断pentahoserver是否在运行,如果没有则启动,如果有则什么也不做

#!/bin/sh
	process=`ps -ef | grep pentaho-server| grep -v grep| wc -l`;
	if [ $process -eq 0 ];then
		echo Pentaho not running
                pid=`ps -ef | grep pentaho-server| grep -v grep| awk '{print $2}'`
		echo $pid
		for id in $pid
  			do
        		kill -9 $id
			pid=`ps -ef | grep pentaho-server| grep -v grep| awk '{print $2}'`
			echo $id
			sleep 1
  			done

		echo "Pentaho server have been stoped!"

		sleep 5
		sh /data/pentaho/pentaho-server/start-pentaho.sh
	else
		echo Pentaho is running! 
	fi

遇到的问题:

1.  crontab 脚本中 ps -ef 命名多打印了PID

如果server没有启动时ps -ef | grep pentaho-server| grep -v grep| awk '{print $2}' 执行结果是空,但是crontab定时执行的结果是打印两个PID,然后脚本执行失败。

原因是:ps -ef | grep pentaho-server | grep -v grep | awk '{print $2}'这行代码中的pentaho-server和目录重名了,所以会查询到两个PID

2. crontab 执行的 lsof 命令失效

标的shell中的lsof之前没有写绝对路径导致一直没有输出,导致后续程序无法执行。

解决方案1: 对lsof命令使用绝对命名,即 /usr/sbin/lsof -i:8080

解决方案2:

看一下PATH变量的内容就明白了,(显示结果是/usr/bin:/bin)并没有包含/sbin,那么当你去执行ifconfig lsof 命令的时候,它找不到这条命令的,具体解决办法呢?就是在脚本里面声明一下环境变量,在脚本里面重新定义一下PATH:

PATH=$PATH:/usr/sbin

最终版自启动脚本:

#!/bin/bash
PATH=$PATH:/usr/sbin
DIR_REL=`dirname $0`
cd $DIR_REL
DIR=`pwd`
#echo '1111'>>$DIR/temp2.txt
#process=`ps -ef | grep pentaho-server/tomcat| grep -v grep| wc -l`
process=`lsof -i:8080 |wc -l`
if [ $process -eq 0 ];then
        pid=`ps -ef | grep pentaho-server/tomcat| grep -v grep| awk '{print $2}'`
        echo $pid >>/data/pentaho/pentaho-server/temp2.txt
        for id in $pid
        do
                kill -9 $id
                pid=`ps -ef | grep pentaho-server| grep -v grep| awk '{print $2}'`
                echo $id
                sleep 1
        done
	# clear cache,and copy catalina.out to server_logs catalogue
	if [ ! -d $DIR/server_logs ];then
		mkdir -p $DIR/server_logs
	fi

	if [  -f "$DIR/tomcat/logs/catalina.out" ];then
        echo "Have copy log file catalina.out to $DIR/server_logs"
        cp $DIR/tomcat/logs/catalina.out $DIR/server_logs/catalina`date +%Y%m%d%H%M%S`.out
	fi
	sleep 2

	rm -rf $DIR/tomcat/temp/*
	rm -rf $DIR/tomcat/logs/*
	rm -rf $DIR/tomcat/work/*
	#rm -rf $DIR/pentaho-solutions/system/karaf/caches/default/*
	rm -rf $DIR/pentaho-solutions/system/jackrabbit/repository/*

        sh $DIR/start-pentaho.sh

        echo "Pentaho server have been started at" $(date "+%Y-%m-%d %H:%M:%S")"!">> $DIR/auto_monitor_server.log
 
fi

最终的脚本测试无误后,通过linux中的crontab 命令进行调度,参考博客系列之前的文章:

Linux 设置开机自启动脚本命令Linux 设置开机自启动脚本命令

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大宇进阶之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值