我正在谷歌计算引擎的Linux(Debian Whiskey)服务器上启动Django 1.6设置。我让Celery 3.1在后台运行以帮助处理一些进程。当我启动一个新实例时(使用我创建的快照),我总是需要启动Celery。我正在寻找一种方法,在服务器加载时自动启动Celery。这在服务器决定重启时特别有帮助,因为他们似乎时常会这样做。为了达到这个目的,我编辑了
rc.local
文件。
$ sudo nano /etc/rc.local
它曾经包含以下内容。
exit 0
[ -x /sbin/initctl ] && initctl emit --no-wait google-rc-local-has-run || true
我对文件进行了编辑,现在是这样写的。
cd /home/user/gce_app celery -A myapp.tasks --concurrency=1 --loglevel=info worker > output.log 2> errors.log &
exit 0
[ -x /sbin/initctl ] && initctl emit --no-wait google-rc-local-has-run || true
The directory:
/home/user/gce_app
是我的Django项目所在的地方,也是我启动Celery所需的目录。然而,在重启实例后,当我输入。
$ celery status
Error: No nodes replied within time constraint.
Opening the errors.log
file, I see:
/etc/rc.local: 14: /etc/rc.local: celery: not found
当然,该代码串开头的cd
应该可以解决这个问题?是否有办法(在Django项目本身)在项目启动时启动Celery实例,使代码更加独立于平台,免受不可避免的操作系统更新的影响?