我有一个连续处理新数据并写入到mongodb的python脚本。在脚本中,它的一个while
循环和一个sleep
连续运行代码。永远运行Python脚本,记录错误并在崩溃时重新启动
建议如何永久运行Python脚本,发生错误时记录错误,并在崩溃时重新启动?
请问node.js的forever
是否合适?我也在同一台Ubuntu服务器上运行node/meteor。
我有一个连续处理新数据并写入到mongodb的python脚本。在脚本中,它的一个while
循环和一个sleep
连续运行代码。永远运行Python脚本,记录错误并在崩溃时重新启动
建议如何永久运行Python脚本,发生错误时记录错误,并在崩溃时重新启动?
请问node.js的forever
是否合适?我也在同一台Ubuntu服务器上运行node/meteor。
最近写了类似的东西。我遵循的基本模式是
while True:
try:
#functionality
except SpecificError:
#log exception
except: #catch everything else
finally:
time.sleep(600)
要处理重新启动,您可以使用init.d或cron作业。
如果你正在写一个守护进程,你应该使用这个命令做到这一点: http://manpages.ubuntu.com/manpages/lucid/man8/start-stop-daemon.8.html
您可以从System V的/etc/init.d/中的脚本产卵这一点,或使用新贵它正在慢慢取代它。
新贵:http://upstart.ubuntu.com/getting-started.html
系统V:http://www.cyberciti.biz/tips/linux-write-sys-v-init-script-to-start-stop-service.html
我发现系统V更容易写,但如果这将永远被打包并以Debian文件,我建议写一个暴发户的conf。
绝对保持睡眠状态,这样它就不会控制CPU负载。
supervisord是完美的这种事情。虽然我曾经检查程序是否每012分钟运行一次cron
作业,但supervisord会在进程内线程中运行所有程序,所以如果程序终止,supervisord会自动重启进程。我不再需要分析ps
的输出以查看程序是否崩溃。
它有一个简单的声明配置文件和可配置的日志记录。默认情况下,它为your-program-name-stderr.log
your-program-name-stdout.log
创建一个日志文件,当从OS软件包管理器(我为Debian)安装supervisord时,这些文件将由logrotate自动处理。
如果你不想配置supervisord
的日志记录,你应该在python中看logging,这样你就可以控制进入这些文件的内容。
如果您使用的是debian衍生产品,则只需通过以root身份执行apt-get install supervisord
即可安装并启动守护进程。
配置文件是非常简单太:
[program:myprogram]
command=/path/to/my/program/script
directory=/path/to/my/program/base
user=myuser
autostart=true
autorestart=true
redirect_stderr=True
supervisorctl
也可以让你看到你的程序交互做的和可以启动和停止多个程序与supervisorctl start myprogram
等
你甚至需要启动该节点/流星内的Python脚本?如果您只是通过数据库进行交互,为什么不单独启动? –
@ChristianF python脚本不需要从node/meteor开始。我想也许node/meteor可以帮助管理python脚本。 – Nyxynyx