我正在使用Twitter自动转发机器人,有时20分钟后机器人停止,有时它不会停止。要解决此问题,我使用crontab每20分钟重新运行一次程序。
*/20 * * * * /home/TwitterFollowBot/bot.py 2>/tmp/twitterBot.log
但问题是如果僵尸程序没有在20分钟内停止运行2X,因为crontab还每20分钟启动另一个实例。如果机器人没有停止,这将继续发生。有时它运行10X,这意味着它转发超过限制。所以我需要做的是每19分钟杀死所有/这个bot.py,并在第20分钟运行一个新的bot.py.
bot.py
#!/usr/bin/env python
from TwitterFollowBot import TwitterBot
my_bot = TwitterBot("/home/TwitterFollowBot/config.txt")
my_bot.sync_follows()
my_bot.auto_rt("@SupStreamers", count=2200)
my_bot.auto_rt("@#SupportSmallStreamers", count=2200)
my_bot.auto_rt("@Small_Streamers", count=2200)
答案 0 :(得分:1)
Cron不是正确的工具。有很多系统监视进程以确保它仍处于运行状态,如果没有,则重新启动它 - 包括supervisor,systemd,monit和upstart。任何这些都会更合适。
答案 1 :(得分:0)
您在脚本的开头放置了一个控制器,它读取当前活动的python脚本。如果相同的脚本已在运行,则告诉脚本什么都不做。
我使用正则表达式,如果你不喜欢正则表达式,你可以使用你想要的任何东西。
import os, commands, subprocess, re
def find(pat, string):
match = re.search(pat, string) # find function for searches below
if match:
return match.group()
else:
return None
allProcessIDs = os.popen('pgrep -lf python').read()
sameProcessID = find('\d{7} python YourApplicationName.py', allProcessIDs)
if sameProcessID:
raise Systemexit