我在Google Compute Engine上的Linux(Debian Whisky)服務器上啓動了Django 1.6。我已經在後臺運行了Celery 3.1以幫助處理一些進程。當我開始一個新實例(使用我創建的快照)時,我總是需要啓動Celery。我正在尋找一種在服務器加載時自動啓動Celery的方法。如果服務器決定重新啓動,這一點特別有用,因爲他們似乎現在就這樣做了。要做到這一點,我已經編輯了rc.local
文件:從Django應用程序內自動啓動Celery
$ 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
該目錄:
/home/user/gce_app
是我的Django項目所在的目錄以及我需要啓動Celery的目錄。然而,在重新啓動實例後,當我輸入:
$ celery status
Error: No nodes replied within time constraint.
打開errors.log
文件,我看到:
/etc/rc.local: 14: /etc/rc.local: celery: not found
肯定的cd
在該代碼串的開頭應該解決這個問題?有沒有一種方法(在Django項目本身內)在啓動項目時啓動Celery實例,以使代碼更加平臺無關並且不受不可避免的OS更新的影響?
小心這裏重生。我不會那麼用,芹菜工人的設計很健壯。請參閱這些[celery init](https://github.com/celery/celery/tree/3.1/extra/generic-init.d/)腳本。 –