【发布时间】:2014-05-01 19:37:01
【问题描述】:
我需要在 cron 中设置一个程序,该程序的设置方式是每次程序终止时都会重新启动
我为什么要做这份工作?
该程序实际上是使用网络抓取从网站中提取信息,并在到达信息最新点时终止
这是python代码的一部分
sql = """SELECT Short_link FROM Properties WHERE Short_link=%s"""
rows = cursor.execute(sql,(link_result))
print rows
if rows>=1:
print "Already present"
sys.exit()
else:
query="""INSERT INTO Properties (Published_Date, Title,Price,Bedroom,Agency_Fee, Bathroom, Size,Prop_ref,Furnished_status,Rent_payment,Building_info,Amenities,Trade_name,Licence, RERA_ID,Phone_info,Short_link) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"""
cursor.execute(query,(date_result, title_result, price_result, bedroom_result, agencyfee_result, bathroom_result, size_result, propertyref_result, furnished_result, rent_is_paid_result, building_result, Amenities_result, tradename_result, licencenum_result, reraid_result, phone_result, link_result))
脚本如下: 运行.sh
#!/bin/bash
PATH=$PATH:/bin:/usr/bin
date +'%H:%M:%S Started' >> /home/ahmed/Desktop/log.txt
TMP_FILE=/tmp/i_am_running
[ -f $TMP_FILE ] && exit
touch $TMP_FILE
date +'%H:%M:%S Starting Python' >> /home/ahmed/Desktop/log.txt
/usr/bin/python /home/ahmed/Desktop/python.py
rm $TMP_FILE
date +'%H:%M:%S Ended' >> /home/ahmed/Desktop/log.txt
我使用的 cron 命令是* * * * * /home/ahmed/Desktop/run.sh
日志文件如下:
15:21:01 Started
15:21:02 Starting Python
15:22:02 Started
15:23:01 Started
15:24:01 Started
15:24:30 Ended
15:25:01 Started
15:25:01 Starting Python
15:26:01 Started
15:27:18 Started
15:28:01 Started
15:29:01 Started
15:30:01 Started
15:31:01 Started
15:31:16 Ended
15:32:01 Started
15:32:01 Starting Python
15:33:01 Started
15:34:01 Started
程序似乎在结束之前重新启动。日志文件应该有启动程序、启动、结束、启动程序、启动、结束等等。
有人可以指导我吗?也许 bash 脚本需要一些更改?如何将程序设置为启动、启动、结束等
【问题讨论】:
-
您是否要确保 Cron 不会执行
run.sh(如果它仍在运行),还是要确保run.sh旨在确保python.py不会同时运行多次? -
考虑在再次运行脚本之前使用 IF NOT 查询按名称检查 PID,或者在可以接受的情况下将 cron 调用减慢到每三或五分钟一次。
-
每次python程序结束时都会运行run.sh。老实说,这是别人做的,据他说,他回答如下stackoverflow.com/questions/22554572/…
-
这已经是正在发生的事情了。该日志可能具有误导性:“已启动”仅表示调用了
run.sh。仅当您看到“正在启动 Python”时才会调用 python 脚本。 -
好吧。所以你的意思是开始意味着尝试调用python程序但它实际上并没有启动程序而只是调用它。只有当我看到启动 python 时才会调用它。这是你说的吗
标签: python linux bash terminal cron