美文网首页我爱编程
ruby on rails实现周期性任务whenever

ruby on rails实现周期性任务whenever

作者: 小新是个程序媛 | 来源:发表于2018-04-16 23:03 被阅读52次

周期性任务可以使用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中,就是不执行

解决思路:

  1. 执行crontab -l查看定时任务时,注意到定时任务配置的是生产环境(production),【定时任务默认情况下执行环境为production 】而我当前的运行环境是开发环境(development),
    定时任务详情

方法:
更新定时任务配置的环境为开发环境
在终端执行

whenever --update-crontab --set environment=development

或者

通过在配置文件config/schedule.rb中添加配置

set :environment, :development

结果:
修改之后发现任务还是没有正常执行

  1. 查看日志记录
    查看日志路径发现配置的日志输出路径在本地不存在(应该是线上路径)

方法:
修改配置文件config/schedule.rb中日志输出路径

日志输出路径配置

结果:
日志输出路径配置修改之后,定时任务就正常执行了
所以没到下一步,看日志的具体信息,就搞定了,开心

相关文章

网友评论

    本文标题:ruby on rails实现周期性任务whenever

    本文链接:https://www.haomeiwen.com/subject/sysykftx.html