Cron工作卡在「執行中」狀態

本文提供當Adobe Commerce cron工作未完成執行並持續處於「執行中」狀態時,以防止其他cron工作執行的解決方案。 發生此狀況的原因有很多,例如網路問題、應用程式當機、重新部署問題。

受影響的產品和版本

雲端基礎結構上的Adobe Commerce,所有版本

症狀 symptom

必須重設的cron個工作的症狀包括:

  • 大量工作出現在cron_schedule佇列中
  • 網站效能開始降低
  • 工作無法依排程執行

解決方案 solutions

一次停止所有cron個工作的解決方案 solution-stop-all-crons-at-once

WARNING
不使用--job-code選項執行此命令會重設​ 所有 cron工作,包括目前執行的那些工作,因此我們建議僅在特殊情況下才使用此命令,例如在您確認必須重設所有cron工作之後。 重新部署預設會執行此命令以重設cron個工作,以便在環境備份後適當地復原。 當索引器執行時,請避免使用此解決方案。

若要解決此問題,您必須使用cron:unlock命令重設cron工作。 這個命令會變更資料庫中cron工作的狀態,強制結束工作以允許其他排定的工作繼續。

  1. 開啟終端機,並使用您的SSH金鑰連線到受影響的環境。
  2. 取得MySQL資料庫認證: shell echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
  3. 使用mysql連線到資料庫: shell mysql -hdatabase.internal -uuser -ppassword main
  4. 選取main資料庫: shell use main
  5. 尋找所有正在執行的cron工作: shell SELECT * FROM cron_schedule WHERE status = 'running';
  6. 複製任何執行時間超過平常的工作的job_code
  7. 使用上一步驟中的排程ID來解除鎖定特定cron工作: shell ./vendor/bin/ece-tools cron:unlock --job-code=<job_code_1> [... --job-code=<job_code_x>]

停止單一cron的解決方案 solution-stop-a-single-cron

  1. 開啟終端機,並使用您的SSH金鑰連線到受影響的環境。

  2. 使用下列命令檢查長時間執行的工作:

    date; ps aux | grep '[%]CPU\|cron\|magento\|queue' | grep -v 'grep\|cron -f'

  3. 在輸出中,就像下面的範例輸出一樣,您會看到目前的日期和流程清單。 START欄顯示處理的開始時間或日期:

    code language-none
    Wed May  8 22:41:31 UTC 2019
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root       590  0.0  0.0  27528  2768 ?        Ss   Jan15   0:49 /usr/sbin/cron -f
    bxc2qly+ 25855  0.0  0.0  23724  2184 ?        S    20:51   0:00 logger -d -u /run/bxc2qlykqhbqe_stg-cron.sock -p cron.info -s -t cron-bxc2qlykqhbqe_stg-bxc2qlykqhbqe_stg
    bxc2qly+ 25860 57.7  1.3 584220 222692 ?       S    20:51   0:02 php bin/magento cron:run
    bxc2qly+ 25863  0.0  0.0  23724  2472 ?        S    20:51   0:00 logger -d -u /run/bxc2qlykqhbqe-cron.sock -p cron.info -s -t cron-bxc2qlykqhbqe-bxc2qlykqhbqe
    bxc2qly+ 25876 53.0  0.6 475472 111468 ?       R    20:51   0:01 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe_stg/bin/magento cron:run --group=index --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25878 57.0  0.6 475472 112080 ?       R    20:51   0:01 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe_stg/bin/magento cron:run --group=staging --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25880 50.5  0.6 475472 111312 ?       R    20:51   0:01 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe_stg/bin/magento cron:run --group=catalog_event --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25882 48.5  0.6 475472 111220 ?       R    20:51   0:00 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe_stg/bin/magento cron:run --group=consumers --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25884 50.5  0.6 475472 111372 ?       R    20:51   0:01 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe_stg/bin/magento cron:run --group=ddg_automation --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25890 32.5  0.6 475368 110672 ?       R    20:51   0:00 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe/bin/magento cron:run --group=staging --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25892 34.5  0.6 475472 110724 ?       R    20:51   0:00 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe/bin/magento cron:run --group=catalog_event --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25894 31.5  0.6 475368 110136 ?       R    20:51   0:00 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe/bin/magento cron:run --group=consumers --bootstrap=standaloneProcessStarted=1
    bxc2qly+ 25896 29.0  0.6 475320 109876 ?       R    20:51   0:00 /usr/bin/php7.1-zts /app/bxc2qlykqhbqe/bin/magento cron:run --group=ddg_automation --bootstrap=standaloneProcessStarted=1
    
  4. 如果您發現長時間執行的cron工作可能會造成區塊部署程式,您可以使用kill命令終止該程式。 您可以識別​ 處理序識別碼 (找到PID欄),然後將該PID放入命令以終止處理序。
    終止處理序 ​命令為:

    kill -9 <PID>

  5. 如果您嘗試重新部署,則可以重新部署。

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a