如何定期运行Python后台进程
我有一个比较简单的脚本,想要每隔大约5个小时在后台运行一次。这个脚本会访问几个不同的网站,检查有没有新内容,然后根据内容下载一些.mp3文件或者在YouTube上点赞歌曲。我有几个目标,不太确定怎么实现:
- 让程序每5个小时运行一次——我对系统级的定时操作不太熟悉。
- 让程序高效地在后台运行——我希望这些“更新”能在用户不知道的情况下进行。
- 让程序在启动时自动激活——我知道作为用户怎么设置这个,但不太清楚怎么把这样的配置加到Python文件里,如果这可能的话。请记住,这只是一个简单的.py脚本——我并不打算把它编译成可执行文件。
这个程序主要是为OSX和其他Unix系统设计的。有没有什么建议可以帮助我实现这些目标?
2 个回答
2
想让程序每5个小时运行一次——我对系统层面的定时操作不太熟悉。
在类Unix系统中,使用cron是实现这个功能的默认方法。
想让程序在后台高效运行——我希望这些“更新”在用户不知道的情况下进行。
通过使用cron,程序会在你的服务器后台运行。用户不会受到太大影响。如果用户在浏览你抓取的mp3页面时,正好你的脚本在运行并保存数据到数据库,用户刷新页面时,新的mp3可能会出现。我不确定这是否是你所说的“用户不知道”的意思。
想让程序在启动时自动激活——我知道作为用户该怎么设置,但不确定如何在python文件中添加这样的配置,如果这可能的话。请记住,这只是一个简单的.py脚本——我并没有把它编译成可执行文件。
我很确定cron的设置在重启后会保留(虽然我不是100%确定),确保cron
服务在启动时被启动。
4
如果你的脚本不需要一直运行,而且听起来确实不需要的话,我建议你设置一个定时任务。
在一般的Linux系统上,你可以通过以下方式编辑你的 crontab 文件
:
$ crontab -e
这会在你常用的编辑器中打开你的crontab文件,等你编辑完并保存后,它会自动安装这个文件。
一个典型的crontab命令看起来像这样:
# m h dom mon dow command
15 0 * * * /bin/bash /home/yourself/bin/dump_my_tables.sh
这一行会每天在00:15执行 dump_my_tables.sh
。你的脚本需要像下面这样:
0 */5 * * * /usr/bin/python /home/yourself/bin/scrape_the_web.py
注意:
- 时间是机器的本地时间(!)
- 有些
cron
版本不支持*/5
这种写法,你需要手动指定想要脚本运行的小时,比如0,5,10,15,20
- 你可能想要重定向输出,但这不在这个回答的范围内