我使用 foreman 在本地运行我的 python 应用程序并对其进行测试。这就是我所做的:
foreman start -e local.env
我正在尝试将调度添加到我的应用程序中,因此我安装了 apscheduler 并按照Heroku 上的教程进行操作。我将此行添加到我的Procfile:
clock: python clock.py
我的clock.py看起来像这样:
from apscheduler.scheduler import Scheduler
sched = Scheduler()
@sched.interval_schedule(minutes=1)
def timed_job():
print 'This job is run every minute.'
@sched.cron_schedule(day_of_week='mon-fri', hour=17)
def scheduled_job():
print 'This job is run every weekday at 5pm.'
sched.start()
print 'Scheduler started'
while True:
pass
所以现在,当我启动工头时,我可以看到:
11:54:05 web.1 | started with pid 16709
11:54:05 clock.1 | started with pid 16710
11:54:05 web.1 | 2014-01-23 11:54:05 [16709] [INFO] Starting gunicorn 18.0
11:54:05 web.1 | 2014-01-23 11:54:05 [16709] [INFO] Listening at: http://0.0.0.0:5000 (16709)
11:54:05 web.1 | 2014-01-23 11:54:05 [16709] [INFO] Using worker: sync
11:54:05 web.1 | 2014-01-23 11:54:05 [16713] [INFO] Booting worker with pid: 16713
看起来有效,但现在,我希望时钟进程应该每分钟记录一次消息,但事实并非如此。实际上我没有从时钟过程中得到任何日志,这正常吗?
我发现当我将它打开一段时间然后 Ctrl+CI 可以看到来自时钟进程的日志,但只有一些:
- 一条“调度程序已启动”消息
- 两个“此作业每分钟运行一次。” 消息,即使我离开它超过 2 分钟
我的问题是,如何使日志实时可见?还是我误解了这一点并且这种行为是正常的?
编辑:在调查了更多之后,我发现我也没有从我的网络进程中获取日志。我认为是工头和gunicorn的混合物阻止了日志的出现,所以我放弃了gunicorn进行开发,我将工头开始改为:
foreman run -e local.env python app/myapp.py runserver
最后我放弃了使用时钟进程,因为我认为为单独的测功机付费只是为了运行时钟进程是浪费钱。相反,我使用的是铁工调度,这足以满足我的简单需求。