我们现在这个项目之前是直接写 crontab 文件来执行定时任务的,在不同的服务器之间部署比较麻烦(由于许多原因,项目部署路径不一样,而且有些应用端口号也不一样,每次需要修改一些部署路径和配置文件),于是我就想至少把定时任务给用 whenever 做了吧,省得每次都 cd 到部署目录下,还要考虑到环境变量问题。 然后我刚才写了这么一个任务:
every :day, at: '3:00' do
rake 'sometask'
end
由于定时任务有好多,而且终端不能滚屏(orz)所以也就随便扫了一眼,然后发现生成的 cron 是这样的 0 15 * * * /bin/bash ........ 3:00 被解析成了 15 点。 推测是 whenever 或者是 rails 里涉及时间的某些机制导致的,于是由于现在是下午,就默认将 3:00 解析成下午三点了。 不知道这个问题算不算 bug,是不是其他 gem 中也会有类似问题。显式写成 03:00 就没有问题了。
=======修改分割线====== 已找到原因,见 3、4 楼。如果有遇到类似问题的可以参考一下。