周期性任务可以使用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
中日志输出路径
结果:
日志输出路径配置修改之后,定时任务就正常执行了
所以没到下一步,看日志的具体信息,就搞定了,开心