周期性任務可以使用whenever,sidetiq等gem,一次性任務可以使用sidekiq來完成
1. whenever
whenever是基于linux的cront的,其實就是ruby代碼翻譯成cront腳本的翻譯器,然后讓cront去執行周期性任務
- gemfile中添加whenever
gem 'whenever', :require=>false
- 生成config/schedule.rb文件
wheneverize
- 在schedule.rb中添加定時任務,whenever默認定義了三種任務類型,runner,command,rake
every 15.minutes do
runner "WeiBo.update"
end
- 將定時任務更新到cront中
whenever -i
- 執行定時任務
whenever -w
- 查看crontab中的定時任務
crontab -l
其他常用命令
#清除定時任務
whenever -c
#將schedule中的定時任務轉換成cront命令顯示出來,不寫入cront任務列表
whenever
cron服務的相關命令
$service cron restart
#ubuntu下啟動、停止與重啟cron:
$sudo /etc/init.d/cron start
$sudo /etc/init.d/cron stop
$sudo /etc/init.d/cron restart
2. 定時任務不執行問題:
問題描述:
使用whenever寫了個定時任務,也更新到crontab中,就是不執行
解決思路:
- 執行
crontab -l
查看定時任務時,注意到定時任務配置的是生產環境(production),【定時任務默認情況下執行環境為production 】而我當前的運行環境是開發環境(development),
定時任務詳情
方法:
更新定時任務配置的環境為開發環境
在終端執行
whenever --update-crontab --set environment=development
或者
通過在配置文件config/schedule.rb
中添加配置
set :environment, :development
結果:
修改之后發現任務還是沒有正常執行
- 查看日志記錄
查看日志路徑發現配置的日志輸出路徑在本地不存在(應該是線上路徑)
方法:
修改配置文件config/schedule.rb
中日志輸出路徑
日志輸出路徑配置
結果:
日志輸出路徑配置修改之后,定時任務就正常執行了
所以沒到下一步,看日志的具體信息,就搞定了,開心