celery beat之pidfile already exists問題


背景

在進行celery定時任務測試時,發現到點任務並未執行,檢查了log發現在啟動celery beat的時候有這樣一個報錯,所以celery beat並未啟動成功。

1
2
3
4
(hzinfo) E:PythonWorkSpacehzinfo>celery beat v3.1.0 (Cipater) is starting.
ERROR: Pidfile (celerybeat.pid) already exists.
Seems we're already running? (pid: 22220)
* Restarting with stat

排查

celery beat在運行時,會自動創建兩個文件:

  • pidfile:默認為celerybeat.pid,保存在項目根目錄。
  • scheduler:默認為celerybeat-schedule,保存在項目根目錄。

這里的報錯說明pidfile已存在。

看下官網的說明

–pidfile

File used to store the process pid. Defaults to celerybeat.pid.

The program won’t start if this file already exists and the pid is still alive.

上次運行的時候,已經自動創建了,進程結束的時候並未自動刪除,從而導致再次運行的時候報錯了。

直接刪除這個pidfile文件,再次啟動celery beat

大專欄   celery beat之pidfile already exists問題e class="highlight shell">
1
celery -A manage.celery beat -s "celery_app/celerybeat-schedule"

運行成功了。

那么難道每次重啟都得先刪除么?

雖然官網上沒提,但是參考網上說法,如果在啟動celery beat的時候配置pidfile參數,並將該參數設置為空,可以規避這個問題。

1
start /b celery -A manage.celery beat -s "celery_app/celerybeat-schedule" --pidfile=

測試了下,果然並沒有生成pidfile,且程序也運行成功了。

總結

celery beat在運行時會生成一個pidfile文件用於記錄當前的pid。且該文件不會因進程的結束而自動刪除。當再次創建celery beat進程的時候,會因為已存在這個文件而啟動失敗。

解決方式有兩種:

  • 在啟動前檢測是否存在改文件並刪除后再啟動

  • 通過啟動時指定空參數的方式規避:

    1
    celery -A manage.celery beat -s "celery_app/celerybeat-schedule" --pidfile=


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM