首先我说一下需求
我有一个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 &