問題描述
在 rails 專案裡面使用 whenever gem 來設定排程,整合到 capistrano(v3)參考 之後,發現排程沒有被設定成功。
解決方法
檢查
Capfile裡面有無加入require 'whenever/capistrano'在 capistrano v3 版本裡面,不需要加上set :whenever_command, "bundle exec whenever --update-crontab"指令,v3 版本已有整合 程式碼。檢查在
config/deploy/production.rb裡面有無加入Rake::Task['whenever:update_crontab'].clear_actions,這樣的指令? 這個指令會把該 task 移除,這樣部署的時候就不會更新 crontab 排程內容,所以要把這個指令移除。修改好以後重新部署,檢查 crontab 內容是否有更新。
1
$ crontab -l
你應該會看到類似這樣的內容:
1
2
3# Begin Whenever generated tasks for: yourapp at: 2023-02-16 17:09:27 +0000
......
# End Whenever generated tasks for: yourapp at: 2023-02-16 17:09:27 +0000如果還是沒有更新或沒有執行,可以檢查
config/schedule.rb裡面的排程內容是否有誤,或是config/deploy/production.rb裡面的roles相關設定是否有誤。另外可以檢視
/var/log/cron裡面的內容,看看是否有錯誤訊息。
參考資料
有時候你可能想要手動測試排程是否有正常執行,可以使用 whenever --update-crontab 指令來更新 crontab 內容,然後使用 crontab -l 指令來檢查 crontab 內容是否有更新,如果有更新,就可以使用 crontab -e 指令來編輯 crontab 內容,然後把 # 移除,這樣就可以手動測試排程是否有正常執行。
P.S. cron 是不需要重新啟動的,只要更新 crontab 內容就可以了。