Ruby on rails rails、Where和docker-cron任务不';跑不动

Ruby on rails rails、Where和docker-cron任务不';跑不动,ruby-on-rails,docker,cron,whenever,Ruby On Rails,Docker,Cron,Whenever,schedule.rb中的我的crontasks在docker容器上不起作用,但是crontab-l结果已经包含以下行: # Begin Whenever generated tasks for: /app/config/schedule.rb 45 19 * * * /bin/bash -l -c 'bundle exec rake stats:cleanup' 45 19 * * * /bin/bash -l -c 'bundle exec rake stats:count' 0 5 * *

schedule.rb
中的我的crontasks在docker容器上不起作用,但是
crontab-l
结果已经包含以下行:

# Begin Whenever generated tasks for: /app/config/schedule.rb
45 19 * * * /bin/bash -l -c 'bundle exec rake stats:cleanup'
45 19 * * * /bin/bash -l -c 'bundle exec rake stats:count'
0 5 * * * /bin/bash -l -c 'bundle exec rake stats:history'
# End Whenever generated tasks for: /app/config/schedule.rb
我可以在容器中手动运行这个命令,它可以正常工作。似乎cron没有启动

Dockerfile:

FROM ruby:2.4.0-slim
RUN apt-get update
RUN apt-get install -qq -y --no-install-recommends build-essential libpq-dev cron postgresql-client
RUN cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
ENV LANG C.UTF-8
ENV RAILS_ENV production
ENV INSTALL_PATH /app
RUN mkdir $INSTALL_PATH
RUN touch /log/cron.log
ADD Gemfile Gemfile.lock ./
WORKDIR $INSTALL_PATH
RUN bundle install --binstubs --without development test
COPY . .
RUN bundle exec whenever --update-crontab
RUN service cron start
ENTRYPOINT ["bundle", "exec", "puma"]

在Dockerfile中,RUN命令仅在构建映像时执行

如果要在启动容器时启动cron,应在
CMD
中运行
cron
。我通过删除
运行服务cron start
并更改
入口点来修改Dockerfile

FROM ruby:2.4.0-slim
RUN apt-get update
RUN apt-get install -qq -y --no-install-recommends build-essential libpq-dev cron postgresql-client
RUN cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
ENV LANG C.UTF-8
ENV RAILS_ENV production
ENV INSTALL_PATH /app
RUN mkdir $INSTALL_PATH
RUN touch /log/cron.log
ADD Gemfile Gemfile.lock ./
WORKDIR $INSTALL_PATH
RUN bundle install --binstubs --without development test
COPY . .
RUN bundle exec whenever --update-crontab
CMD cron && bundle exec puma
减少映像的层数是一种最佳做法,例如,您应该始终在同一个RUN语句中将RUN-apt-get-update和apt-get-install结合在一起,并在以下时间清理apt文件:
rm-rf/var/lib/apt/list/*

来自ruby:2.4.0-slim的

运行apt-get-update&&\
apt get install-qq-y——无安装建议构建基本libpq开发cron postgresql客户端\
rm-rf/var/lib/apt/lists/*&&\
cp/usr/share/zoneinfo/Europe/Moscow/etc/localtime
环境语言C.UTF-8
环境轨道和环境生产
环境安装路径/应用程序
运行mkdir$INSTALL_PATH&&\
touch/log/cron.log
添加Gemfile Gemfile.lock/
WORKDIR$INSTALL\u路径
在不进行开发测试的情况下运行bundle安装(binstubs)
复制
随时运行bundle exec--更新crontab
CMD cron&bundle exec puma