Linux定时任务Crontab以及nohup启动

本文介绍了因心跳包缺失导致的MQ爬虫进程挂掉问题及其解决方案,通过设置heartbeat参数为0来避免服务端主动断开连接,并通过定时任务确保爬虫进程稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   按理说nohup启动的程序不要再去写定时任务了,但是今天早上小伙伴告诉我线上的MQ消息,爬虫已经累积了十二条没消费掉,这可真是把我吓尿了.后面一看日志,表面原因是nohup守护的爬虫进程挂掉了.

总结nohup 挂掉的两个理由

  1. 程序自己报错停掉
  2. kill -9 被强制杀掉

当时也没多想,直接就重启了脚本,爬虫夸夸的跑,跑着跑着又出错了,幸亏这次的报错信息给捕获到了,报错信息:

pika.exceptions.ConnectionClonClosed: (-1, "ConnectionResetError(104, 'Connection reset by peer')")

后面一顿百度发现是因为服务端没有收到客户端的心跳包,默认是10秒,但是预计的已经超过10秒还没有发心跳包,所以服务端主动断连了,设置heartbeat=0, 意味着不检测心跳,server端将不会主动断开连接。
解决办法也很简单,设置heartbeat参数为0就行了

代码截图

因为这种情况本地没法测试,我初步怀疑是因为MQ客户端连接过多,然后我这个没有设置心跳,所以服务端为了减轻压力,就把我这个客户端给干掉了

亡羊补牢
定时任务检查进程号,如果不存在直接执行启动脚本

  1. 安装Crontab
    yum install crontabs

  2. 启动服务
    /sbin/service crond start //启动服务

  3. 加入开机自动启动:
    chkconfig –level 35 crond on

  4. 编写test.sh脚本文件

#!/bin/bash
ps -ef|grep test.py |grep -v "grep"  # 判断脚本是否启动
if [ $? -ne 0 ]		#如果没有
then
echo "start process....."
nohup python /home/hlz/Desktop/test.py   >> /home/hlz/Desktop/test.log 2>&1 &      # 执行启动脚本命令,nohup输出是追加到日志文件,这样不会覆盖掉之前的日志文件
else
echo "runing....."
fi

5… 给脚本赋予执行权限
chmod +x ./test.sh #使脚本具有执行权限

6… 编辑当前用户的cron配置
crontab -e
* */1 * * * /home/hlz/Desktop/test.sh #每一小时去启动这个脚本文件

###补充学习:
crontab文件格式:

* * * * * command

   minute   hour    day   month   week      command

  分          时         天      月        星期       命令

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

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

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

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

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

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

这里写图片描述
这是每天早上八点执行这个脚本
这是每天在这里插入图片描述

每两个小时执行一次
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值