centos怎样编写tomcat宕机自动重新启动

centos怎样编写tomcat宕机自动重新启动,第1张

一、设置tomcat定时启动

1,首先将tomcat注册为服务,先打开tomcat的bin目录下servicebat文件,修改下面的值,这是sevvice的注册名称和显示名称,一般可使用默认值。

set SERVICE_NAME=Tomcat7

set PR_DISPLAYNAME=Apache Tomcat

然后修改jvm大小,搜索到--JvmMs 128 --JvmMx 256 进行修改,因为做成服务启动,启动的时候就不会用到 catalinabat,也就不会读取里面的jvm设置了。(可选,可以不设置)

然后运行cmd命令窗口,cd 到tomcat的bin目录下,运行下面的命令

servicebat install 运行成功过后,会提示服务已经安装成功。

2,制作重启脚本restartbat,文件内容如下

net stop Tomcat7 net start Tomcat7

3,利用控制面板里面的“任务计划”设置第2步的脚本运行时间计划

4,如果想删除服务,也很简单,先把服务停掉,然后在cmd窗口运行下面的命令即可,后面那个Tomcat7是服务名。

sc delete Tomcat7

需要注意的是,需要先把服务停掉,才能一次删除成功,或者删除之后再停止服务,就会发现服务已经删除成功了。

二、监听tomcat

只要运行startbat即可,相关配置在configproperties文件中,默认即可, 如果服务名不对应就修改关闭和启动命令的服务名即可:net start Tomcat7括号中服务名,然后运行startbat

下面是具体的监听代码:

首先是监听类TomcatMonitor java:

[java] view plain copy

import javaioBufferedReader;

import javaioIOException;

import javaioInputStream;

import javaioInputStreamReader;

import javanetMalformedURLException;

import javanetURL;

import javanetURLConnection;

import javautilProperties;

/

@describe:TomcatMonitorjava

@date 2016-7-4

@author liuweilong

/

public class TomcatMonitor implements Runnable{

String start=""; //系统命令 启动

String stop=""; //系统命令 关闭

String testHttp=""; //测试连接地址

int testIntervalTime=1;//测试连接间隔时间,单位为秒

int waitIntervalTime=2; //等待测试间隔时间,单位为秒

int testTotalCount=5; //测试连接总次数

Thread thread=null;

public TomcatMonitor(){

InputStream in = TomcatMonitorclassgetResourceAsStream("configproperties");

Properties p = new Properties();

try {

pload(in);

stop=pgetProperty("stop");

start=pgetProperty("start");

testHttp=pgetProperty("testHttp");

testIntervalTime=IntegerparseInt(pgetProperty("testIntervalTime"));

waitIntervalTime=IntegerparseInt(pgetProperty("waitIntervalTime"));

testTotalCount=IntegerparseInt(pgetProperty("testTotalCount"));

} catch (Exception e) {

eprintStackTrace();

}

Systemoutprintln("初始化成功!");

thread=new Thread(this);

threadstart();

}

public void run() {

Systemoutprintln("正在监控中");

int testCount=0;

while(true){

testCount=0;

testCount++;

boolean isrun=test();

Systemoutprintln("正在启动测试连接,尝试连接次数为:"+testCount+",结果为:"+(isrun==false"失败":"成功!"));

while(!isrun){

if(testCount>=testTotalCount)break;

try {

threadsleep(testIntervalTime1000);

} catch (InterruptedException e) {

eprintStackTrace();

}

testCount++;

Systemoutprintln("正在启动测试连接,尝试连接次数为:"+testCount+",结果为:"+(isrun==false"失败":"成功!"));

isrun=test();

}

if(!isrun){

try{

//关闭tomcat服务

Process proc = RuntimegetRuntime()exec(stop);

threadsleep(5000);

//启动tomcat服务

Systemoutprintln("测试连接失败,正在重启tomcat");

Process p=RuntimegetRuntime()exec(start);

Systemoutprintln("重启tomcat成功");

}catch(Exception e){

eprintStackTrace();

Systemoutprintln("重启tomcat异常,请查看先关错误信息。。。。。");

}

}

try {

threadsleep(waitIntervalTime1000);

} catch (InterruptedException e) {

eprintStackTrace();

}

isrun=test();

}

}

public boolean test(){

URL url=null;

try {

url = new URL(testHttp);

} catch (MalformedURLException e) {

eprintStackTrace();

}

try {

URLConnection urlConn=urlopenConnection();

urlConnsetReadTimeout(15000);

BufferedReader reader = new BufferedReader(new InputStreamReader( urlConngetInputStream())); //实例化输入流,并获取网页代码

String s;

while ((s = readerreadLine()) != null) {

return true;

}

} catch (Exception e) {

return false;

}

return false;

}

public static void main(String[] args) throws Exception{

TomcatMonitor tm=new TomcatMonitor();

}

}

然后是对应的配置文件configproperties:

[plain] view plain copy

#系统命令 启动

start=net start Tomcat7

#关闭

stop = net stop Tomcat7

#测试连接总次数

testTotalCount=3

#连接失败时,再次检测时间间隔,单位为秒

testIntervalTime=3

#连接超时时间,即多少秒tomcat没响应视为宕机,单位为秒

connectionTimeout=15

#tomcat启动时间,防止在tomcat尚未启动完成的时候,程序又去检验tomcat状态,造成尚未启动完成又重新启动,单位为秒

tomcatStartTime=600

#测试连接地址

testHttp=http://127001:8080

#正常情况下,每次检测间隔时间,单位为秒

waitIntervalTime=30

最后是启动的startbat:

[plain] view plain copy

java -cp TomcatMonitor

Windows系统想要快速设置开机自动启动某个程序,可以使用以下几种方法设置:

第一种:设置启动项

1找到启动文件夹,我的是C:\Users\ThinkPad\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup,或者打开运行,输入shell:startup,回车,也可以快速打开启动文件夹。

2拷贝需要开机启动的程序的快捷方式到此文件夹即可。

3打开任务管理器-启动查看启动项。

这样就设置好了,下次计算机启动时,程序也会自动启动的。

第二种:使用计划任务自启动

1新建文本文件DebugStarttxt,打开写入以下内容:

tasklist|find /i "authSenderexe" && echo started || start "" "D:\Debug\authSenderexe"。

这条语句不能换行, authSenderexe 是程序名, "D:\Debug\authSenderexe"是此程序所在路径,tasklist|find /i "authSenderexe"是判断进程是否存在,程序是否已经开启,如未开启才会启动程序,然后改后缀名 txt 为 bat,双击即可启动程序。(可以在每条语句前使用 :: 来注释一条语句),这种方法还可以批量启动不同程序,只需要在此文件中重启一行,按相同格式写第二个要启动的程序对应的语句即可。

2进入任务计划程序窗口,创建任务。

接着选择触发器选项卡,选择新建,在第一栏开始任务处选择登录时(启动时开始任务需要管理员权限)或启动时(启动时开始任务需要管理员权限),点击确定。由于我们的 bat脚本有做判断,所以不用担心程序会启动多次。

在操作选项卡选择新建,并选择启动程序选项,以及在程序和脚本处选择刚才编写的bat程序,点击确定,然后再点击确定(创建任务界面的确定)。

关闭页面,即可做到开机自动启动程序。

第三种:通过组策略设置脚本随服务器启动

1开始->运行->gpeditmsc->计算机配置->Windows设置->脚本(启动/关机)。其中Win10有很多版本,其中家庭版默认是不提供组策略功能,如果需要给win10的家庭版添加组策略的功能,可以参考https://blogcsdnnet/lwpkjio/article/details/85236808。

2添加启动脚本,点击确定。

这样就可以了。

第四种:添加服务自动运行

1开始---运行---cmd---回车,在弹出的窗体中输入如下命令:

sc create Debug binPath= D:\Debug\authSenderexe start= auto,其中Debug为将要创建的服务名。要删除创建的服务也很简单,使用以下命令即可:sc delete ServiceName

2打开控制面板---管理工具---服务(或者 开始---运行---servicesmsc---确认)打开服务管理器,看看你创建的服务已经在里面了,至此,服务运行已创建完成。

不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为xxbat,编码选ANSI

@echo off

rem bat间歇性重新运行

set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4

title %#% +%$%%$%/%@% %z%

cd /d "%~dp0"

set sleep=1800

:loop

>"tmpbat" echo;title #mark#

>>"tmpbat" echo;php "%~dp0Aphp"

start "" "tmpbat"

timeout /t %sleep% /nobreak

for /f "tokens=2 delims=," %%a in ('tasklist /fi "imagename eq cmdexe" /v /fo csv^|find "#mark#"') do taskkill /f /pid %%a /t

goto loop

现在的Linux操作系统基本上都用systemd管理服务了,这玩意本身就自带服务挂了自动重启功能。只需要配置一个on-failure属性即可。

如果你想把你的程序变成服务,建议抽点时间学学systemd,不会占用你太多时间。

vi /lib/systemd/system/gamedbd service

#写入以下内容  根据你的情况自己修改

[Unit]

Description=OpenSSH server daemon

Documentation=man:sshd(8) man:sshd_config(5)

After=networktarget sshd-keygenservice

Wants=sshd-keygenservice

[Service]

EnvironmentFile=/etc/sysconfig/sshd

ExecStart=/usr/sbin/sshd -D $OPTIONS

ExecReload=/bin/kill -HUP $MAINPID

Type=simple

KillMode=process

Restart=on-failure

RestartSec=42s

[Install]

WantedBy=multi-usertarget

说明:

ExecReload字段:重启服务时执行的命令

ExecStop字段:停止服务时执行的命令

ExecStartPre字段:启动服务之前执行的命令

ExecStartPost字段:启动服务之后执行的命令

ExecStopPost字段:停止服务之后执行的命令

Restart字段可以设置的值如下。

no(默认值):退出后不会重启

on-success:只有正常退出时(退出状态码为0),才会重启

on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启

on-abnormal:只有被信号终止和超时,才会重启

on-abort:只有在收到没有捕捉到的信号终止时,才会重启

on-watchdog:超时退出,才会重启

always:不管是什么退出原因,总是重启

// 最后执行下面两句,就可以了

systemctl enable gamedbd service

systemctl start gamedbd service

这样,服务器如果被杀掉会自动重启了

LINUX服务器定时重启的具体命令如下:

crontab -e  

0 1 /sbin/reboot                      ( 0 1 表示每天凌晨一点重启)

0 1 1/sbin/reboot                        (0 1 1表示每周一凌晨一点重启

30 2 /home/bin/oraclebackupsh     (备份数据库和站点目录)

30 3 /home/bin/cmsbackupsh          (备份数据库和站点目录)

[root@localhost ~]# /etc/initd/crond restart          

[root@localhost ~]# chkconfig --levels 35 crond on  (重启crond服务)

扩展资料:

在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute hour day month week command

其中:

1minute: 表示分钟,可以是从0到59之间的任何整数。

2hour:表示小时,可以是从0到23之间的任何整数。

3day:表示日期,可以是从1到31之间的任何整数。

4month:表示月份,可以是从1到12之间的任何整数。

5week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

6command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

--------------------------------start of script -------------------------------

#!/bin/bash

# 运行记录日志

runlog=/var/test/testlog

# 切换到脚本的工作目录

cd /var/test

# 首先以正常的方式(尝试)结束掉test服务的进程,静默结束

pgrep test |xargs kill -15 &>/dev/null

# 休息1秒,让出1秒时间充分地停止进程

sleep 1

# 检查一下test有没有被成功的结束,首先判断一下执行kill -15以后是否残留有test服务的进程

processnum=$(pgrep test |wc -l)

# 如果test进程数量大于0,则自动让脚本采用强制进程结束的方式快速终止test进程;

if [[ "$processnum" -gt "0" ]];then

pgrep test |xargs kill -9 &>/dev/null

# 发送wait指令,kill -9 一旦执行完毕脚本立刻执行接下来的操作

wait

fi

# 记录停止服务的时间,时间格式的呈现:11/30/13 06:25:37

echo "$(date +"%D %T") service test stoped" >>$runlog

# 执行你的启动命令 ,静默启动

/test /testlua &>/dev/null

# 休息1秒,让出1秒时间充分地让test进程启动完毕

sleep 1

# 统计启动命令执行后test进程的数量

processnum=$(pgrep test |wc -l)

# 如果进程的数量大于0,记录服务成功启动;

if [[ "$processnum" -gt "0" ]];then

echo "$(date +"%D %T") service test start sucess" >>$runlog

# 否则(进程数量等于0),记录服务启动失败;

else

echo "$(date +"%D %T") service test start fail" >>$runlog

fi

----------------------------end of script -----------------------------

将上述代码存入到testsh

在系统的crontab里面加入 00 00,12 /var/test/testsh &>/dev/null ,便捷的方法:echo '00 00,12 /var/test/testsh &>/dev/null' >>/var/spool/cron/ , 用能够有权限执行testsh的用户的账号名称替代(如果不是root用户,那么要确保你调用的用户的SHELL环境变量是/bin/bash或者是/bin/sh),比如使用root, echo '00 00,12 /var/test/testsh &>/dev/null' >>/var/spool/cron/root

1、通过SSH已root用户登录系统

2、执行crontab -e进入编辑模式

3、按i进入输入模式,添加如下命令,

每天2点01分重启

代码:01 2 reboot

” reboot”,前面五个号代表五个数字,顺序分别是:分、时、日、月、星期,

它们数字的取值范围和含义如下:

分钟 (0-59)

小时 (0-23)

日期 (1-31)

月份 (1-12)

星期 (0-6)//0代表星期天

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » centos怎样编写tomcat宕机自动重新启动

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情