我尝试每天只运行一次这个特定的shell脚本。下面是我的runLucene.py
代码:
#!/usr/bin/env python
import os
from extras.download_datos_desambiguar import news_Lucene
x=datetime.today()
y=x.replace(day=x.day, hour=09, minute=00, second=0, microsecond=0)
delta_t=y-x
secs=delta_t.seconds+1
def fourdlife():
print "checking function"
os.system("~/code/4dlife_repo/4dbatch/src/engines/extras/download_datos_desambiguar/news_Lucene.py")
t = Timer(secs, fourdlife)
t.start()
print "timer started"
字符串
我在ProcesosContinuous.py
文件中运行这段代码,如下所示:
while True:
os.system("./runl.sh")
#some other processes
型
其中runl.sh
是
python ~/code/4dlife_repo/4dbatch/src/engines/extras/download_datos_desambiguar/news_Lucene.py
型
这段python代码总是在我的apache2
服务器上运行。
然而,这是在任何给定的时间工作,而不仅仅是指定的时间。我做错了什么?还有,我觉得有一个更好的方法来做到这一点。我看了cron
任务,但这不是我正在寻找的。我不希望我的程序去sleep()
,因为我需要其他进程运行后,runl.sh
进程。什么是最好的方法这个吗
3条答案
按热度按时间s4n0splo1#
命令
crontab -e
将打开一个交互式编辑器,您可以在其中定义cron作业。在该编辑器的缓冲区中,您可以输入如下所示的行(然后保存它):
字符串
此命令将在每个午夜运行
script.sh
。nbnkbykc2#
cron总是在做它自己的事情,我认为使用它比使用一个python脚本来不断检查是否是时候运行shell脚本要好得多。
也就是说,当您创建crontab时,它将位于users crontab下,因此只需查看用户和/或-u即可。
xienkqul3#
虽然4 Each的答案适用于在crontab文件中提供的时间运行的计算机,但有一个更好的解决方案可以每天执行|每周|每月任务由jeff提供。
我将重述最重要的信息。
当您的计算机关闭(或cron守护程序未运行)时,cron作业将不会启动。
如果您有作业要在计算机关闭后运行,请使用以下目录:
字符串
这依赖于系统启动脚本和cron本身来运行。
**对于简单的“每日”、“每周”、“每月”作业,请将脚本的副本或符号链接放在/etc/cron中的一个。{daily|每周|**这将负责每天/每周/每月运行它,如果您的计算机在“每周”脚本正常运行的那一天关闭,它将在下次计算机打开时运行它们。