我正在構建一個網路應用程式,教師提供課程,客戶購買它們。我需要自動化來改變課程狀態。幾乎只是檢查一些條件,例如當當前時間大于截止日期時關閉課程。我正在使用 php-symfony,一切都是 dockerized。所以要訪問我的 php 容器,我必須啟動 docker-compose 并輸入docker-compose exec php bash. 好吧,在 php 中,我有一個可以手動運行的命令,以檢查所有課程狀態,如果滿足條件,還可能對資料庫進行一些更改。但是為了自動化這個程序,我決定使用 crontabs。我已經在 cmd 中測驗了該命令,我是否有權執行此類操作并且它有效,所以我只是將它放入 crontab 中以每分鐘執行一次。
* * * * * cd /home/martin/PhpstormProjects/bp_project && sudo docker-compose exec php php bin/console courses-check >/dev/null 2>&1
第一部分進入專案檔案夾,第二部分打開 docker 容器并運行檢查課程狀態的命令。在 cmd 中,整個命令有效。即使在/var/log/syslog這應該是默認的 crontab 日志檔案中,它也給了我這個輸出:
May 8 16:42:01 martin-ubuntu CRON[1032921]: (martin) CMD (cd /home/martin/PhpstormProjects/bp_project && sudo docker-compose exec php php bin/console courses-check >/dev/null 2>&1)
我沒有看到任何可見的錯誤,但是在資料庫中查看時,它并沒有改變任何值。
所以我在想它可能與docker有關?我試圖在 crontab 中添加第二個命令,即:
* * * * * cd /home && echo "hi" > a.txt
它每分鐘都將“hi”保存到給定的檔案中。因此,雖然第一個命令不起作用,但這個命令起作用。任何想法隱藏的問題在哪里?
uj5u.com熱心網友回復:
把你的 crontab 改成這個
* * * * * sudo docker-compose -f /home/martin/PhpstormProjects/bp_project/docker-compose.yml run --rm php sh -c ' bin/console courses-check' >/dev/null 2>&1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/475564.html
上一篇:如何合并重復項
下一篇:symfony5表單型別定義標簽
