您的位置:首页 > 运维架构 > Shell

shell脚本编写,实现爬虫挂掉后重启

2016-06-23 17:42 603 查看

首先我说一下需求

我有一个java写的爬虫,需要运行在linux后台,爬虫分为服务器端和客户端

后台运行爬虫

linux运行jar文件
java -jar ./spider_server.jar


后台运行:

nohup java -jar ./spider_server.jar > server.log 2>&1 &


使用nohup命令,然后把日志信息输出到server.log中

如果直接使用
java -jar ./spider_server.jar &
当前终端关闭后则程序停止运行

判断爬虫进程是否挂掉

ps -ef | grep spider_server.jar |wc -l


此命令输出结果为下面记录的个数:



当spider_server进程存在时,输出为2

当spider_server进程不存在时,输出为1

我们可以判断输出结果是否大于1来判断爬虫是否存在

另一种方式判断爬虫进程是否挂掉

jps |grep spider_server


jps命令列出所有的java进程

shell脚本

我的爬虫是这样设计的,server端挂掉则client端会跟着挂掉,而client端挂掉server端继续运行,所以编写的shell脚本如下

vim restart.sh
#!/bin/bash
while :       #循环,为了让脚本一直运行监控
do
COUNT=`ps -ef | grep spider_server.jar |wc -l`
COUNT1=`ps -ef | grep spider_client.jar |wc -l`

if [ "$COUNT" -gt 1 ];then
echo "server service is ok"
if [ "$COUNT1" -gt 1 ];then
echo "client service is ok"
else
echo "client servicie not exist"
nohup java -jar ./spider_client.jar > client.log 2>&1 &
fi
else
echo "server servicie not exist"
nohup java -jar ./spider_server.jar > server.log 2>&1 &
sleep 10s
nohup java -jar ./spider_client.jar > client.log 2>&1 &
fi
sleep 60
done


运行shell脚本

因为我们需要脚本一直运行在后台,所以也需要使用nohup运行

nohup ./restart.sh > restart.log 2>&1 &
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell 爬虫 脚本