Tomcat定时重启sh脚本

Tomcat定时重启脚本,可以在发布版本的时候避免手动运行shudown.sh和startup.sh脚本,此步骤会让发布新的项目版本步骤繁琐,下面我以CentOS-6.8为例详细描述一下操作步骤:

  • 第一步:root用户下新建编写shell脚本,使用命令:vi tomcat_restart.sh 或者 touch tomcat_restart.sh创建文件。
[root@CentOS bin]# vi tomcat_restart.sh 

 

[root@CentOS bin]# touch tomcat_restart.sh
  • 第二步:将下面脚本复制粘贴到创建的tomcat_restart.sh文件中,Esc,:wq保存退出。
#!/bin/bash
process_name=java
tomcat_path=/usr/local/java/tomcat7.0/apache-tomcat-7.0.41/bin
pid=`ps -ef|grep $process_name|grep -v grep|awk '{print $2}' `
echo $pid
 
if [ -n "$pid" ];
 
then
 
{
 
echo "======tomcat is start===shutdown======"
 
$tomcat_path/shutdown.sh
 
sleep 5
 
$tomcat_path/shutdown.sh
 
sleep 15
 
pid=`ps -ef|grep $process_name|grep -v grep|awk '{print $2}'`
 
if [ -n "$pid" ];
 
then
 
{
 
echo "======to kill the tomcat pid $pid======"
 
kill -9 $pid
 
sleep 3
 
}
 
fi
 
echo "======start tomcat======"
 
$tomcat_path/startup.sh
 
}
 
else
 
{
 
echo "======tomcat is stop===start======"
 
$tomcat_path/startup.sh
 
}
 
fi
 
  • 第三步:修改tomcat_restart.sh权限:
[root@CentOS bin]# chmod 777 tomcat_restart.sh
  • 第四步:手动测试文件是否可以执行:
[root@CentOS bin]# ./ tomcat_restart.sh
  • 第五步:添加Crontab定时脚本/任务计划:
[root@CentOS bin]# crontab -e

如何设定定时时间详见如下描述:

例:

0 2  * * * /usr/local/java/tomcat7.0/apache-tomcat-7.0.41/bin/tomcat_restart.sh >> /usr/local/java/tomcat7.0/apache-tomcat-7.0.41/bin/tomcat_restart.log

每天2点执行 tomcat_restart.sh 脚本并把执行日志追加到 tomcat_restart.log 文件中。

  • 第六步:关闭/启动定时服务
[root@CentOS bin]# service crond stop

[root@CentOS bin]# service crond start
  • 第七步:查看该任务是否在定时列表里面:
[root@CentOS bin]# crontab -l
0 2 * * * /usr/local/java/tomcat7.0/apache-tomcat-7.0.41/bin/tomcat_restart.sh >> /usr/local/java/tomcat7.0/apache-tomcat-7.0.41/bin/tomcat_restart.log
  • 此时已经成功创建了定时任务。

脚本说明:

1、process_name就是我们通过 ps -ef|grep process_name能得到一个我们需要杀掉的进程,因为tomcat的启动是基于java的jdk的进程。

2、tomcat_path就是我们在服务器上tomcat的bin目录的具体路径。

错误处理:

1、sh脚本异常:-bash: ./tomcat_restart.sh: /bin/sh^M: bad interpreter: No such file or directory 这是不同系统编码格式引起的, tomcat_restart.sh是在Window系统下直接创建的.sh文件可能有不可见字符,需要修改文件的格式。

解决方法:

①直接在ssh中建立文件,录入脚本。

②设置文件编码格式:set ff=unix 或 :set fileformat=unix 保存退出 :wq

2、Tomcat 报错 java.net.connectexception:拒绝连接 解决办法,执行./shutdow.sh脚本关闭服务器,提示出现如下错误:
tomcat java.net.ConnectException: Connection refused 或者执行./shutdown.sh后,tomcat是stop但是java的jdk进程还在。
命令:ps -ef|grep java 找到所有java进程号,kill -9 进程号,把出现的进程干掉

保留: 用户名  XXX XXX  0 17:42 pts/0    00:00:00 grep --color=auto java之外。

重启:./startup.sh
原因与分析:表明原因在于端口被占用等可能性,其根本在于你shutdown的时候,执行的是shutdown.sh脚本,而如果项目此时有些数据库链接之类的,以至tomcat其实根本没有真正关闭,也是就是没有完全关闭掉,导致你再次shutdown的时候报错。

3、crontab任务不执行,手工执行文件可以。

问题描述:默认是root用户登录。

sh文件写法无异常,结果还是不执行,考虑到从根目录/切换到root用户目录~,查看环境变量文件。

[root@CentOS /]# su root
[root@CentOS /]# cd ~
[root@CentOS ~]# cat .bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

export PATH
[root@CentOS ~]# 

发现export PATH下面没有定义环境变量信息,导致root用户没有环境变量信息,所以在root用户下面执行tomcat_restart.sh无效

于是在export PATH 下面添加两行,完整文件如下:

[root@CentOS ~]# cat .bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

export PATH
export CATALINA_HOME=/usr/local/java/tomcat7.0/apache-tomcat-7.0.41
export JAVA_HOME=/usr/local/java/jdk1.7.0_55
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HOME/bin:$CATALINA_HOME/bin
export CLASSPATH=./:$JAVA_HOME/lib:$JRE_HOME/lib:$CATALINA_HOME/lib

:wq 保存退出,应用文件.bash_profile的修改:

[root@CentOS ~]# source .bash_profile 

再次编辑crontab任务,重启crond服务。

转载请注明出处:BestEternity亲笔。 

附:

Linux下crontab命令的用法:

https://wenku.baidu.com/view/06b162200722192e4536f6ab.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值