首页 > 解决方案 > Cronjob 不执行“bundle exec rake -f ...”

问题描述

我正在尝试使用 cronjob 在 docker 容器中通过电子邮件自动创建 redmine 的问题。我使用了官方 redmine docker 镜像的略微修改版本,安装了 cron 和一些额外的环境变量。手动,当我在终端中运行以下行时,一切正常。

# cd /usr/src/redmine && bundle exec rake -f /usr/src/redmine/Rakefile redmine:email:receive_imap RAILS_ENV="production" host=$IMAP_HOST port=$IMAP_PORT ssl=1 username=$SMTP_USER password=$SMTP_PASSWORD -r "openssl" -E "OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE"
(eval):1: warning: already initialized constant OpenSSL::SSL::VERIFY_PEER
W, [2020-12-11T14:18:43.730617 #86]  WARN -- : Creating scope :system. Overwriting existing method Enumeration.system.
W, [2020-12-11T14:18:45.264865 #86]  WARN -- : Creating scope :sorted. Overwriting existing method Group.sorted.
W, [2020-12-11T14:18:45.273745 #86]  WARN -- : Creating scope :sorted. Overwriting existing method User.sorted.
I, [2020-12-11T14:18:46.534306 #86]  INFO -- : Performing ActionMailer::DeliveryJob (Job ID: eda80c3a-dc7d-4dcc-9fb9-ad25414cbad2) from Inline(mailers) with arguments: "Mailer", "issue_edit", "deliver_now", #<GlobalID:0x000055f759eb7818 @uri=#<URI::GID gid://redmine-app/User/1>>, #<GlobalID:0x000055f759eb6940 @uri=#<URI::GID gid://redmine-app/Journal/1>>
I, [2020-12-11T14:18:46.560561 #86]  INFO -- :   Rendering mailer/issue_edit.text.erb within layouts/mailer
I, [2020-12-11T14:18:46.597403 #86]  INFO -- :   Rendered mailer/_issue.text.erb (34.9ms)
I, [2020-12-11T14:18:46.597516 #86]  INFO -- :   Rendered mailer/issue_edit.text.erb within layouts/mailer (36.9ms)
I, [2020-12-11T14:18:46.600656 #86]  INFO -- :   Rendering mailer/issue_edit.html.erb within layouts/mailer
I, [2020-12-11T14:18:46.613771 #86]  INFO -- :   Rendered mailer/_issue.html.erb (0.9ms)
I, [2020-12-11T14:18:46.613876 #86]  INFO -- :   Rendered mailer/issue_edit.html.erb within layouts/mailer (13.1ms)
I, [2020-12-11T14:18:46.620620 #86]  INFO -- : Performed ActionMailer::DeliveryJob (Job ID: eda80c3a-dc7d-4dcc-9fb9-ad25414cbad2) from Inline(mailers) in 86.17ms
I, [2020-12-11T14:18:46.621236 #86]  INFO -- : Enqueued ActionMailer::DeliveryJob (Job ID: eda80c3a-dc7d-4dcc-9fb9-ad25414cbad2) to Inline(mailers) with arguments: "Mailer", "issue_edit", "deliver_now", #<GlobalID:0x000055f75a681d00 @uri=#<URI::GID gid://redmine-app/User/1>>, #<GlobalID:0x000055f75a681530 @uri=#<URI::GID gid://redmine-app/Journal/1>>
I, [2020-12-11T14:18:46.622072 #86]  INFO -- : MailHandler: issue #1 updated by Redmine Admin

现在,我想创建一个执行这一行的 cronjob,比如说每分钟。我在下面添加了 cronjob,但仍然没有预期的结果。

# crontab -l
* * * * * cd /usr/src/redmine && bundle exec rake -f /usr/src/redmine/Rakefile redmine:email:receive_imap RAILS_ENV="production" host=$IMAP_HOST port=$IMAP_PORT ssl=1 username=$SMTP_USER password=$SMTP_PASSWORD -r "openssl" -E "OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE"

/var/log/cron.log我知道的文件中,cronjob 已执行。

Dec 11 14:43:01 26c0ec148cea CRON[155]: (root) CMD (cd /usr/src/redmine && bundle exec rake -f /usr/src/redmine/Rakefile redmine:email:receive_imap RAILS_ENV="production" host=$IMAP_HOST port=$IMAP_PORT ssl=1 username=$SMTP_USER password=$SMTP_PASSWORD -r "openssl" -E "OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE")

如果我附加&> /home/redmine/cron.log到作业,则会创建一个空文件。我假设 cron 以某种方式破坏了命令。

我已经尝试使用bundle( /usr/local/bin/bundle) 和rake( /usr/local/bundle/bin/rake) 的完整路径但没有成功。你能帮我修复这个 cronjob 或者告诉我如何进一步调试吗?

设置:

Dockerfile

FROM redmine:latest

ENV SMTP_AUTHENTICATION="login" \
    SMTP_DOMAIN="gmail.com" \
    SMTP_HOST="smtp.gmail.com" \
    SMTP_PASSWORD="<password>" \
    SMTP_PORT="587" \
    SMTP_TLS="true" \
    SMTP_USER="<email>" \
    IMAP_HOST="imap.gmail.com" \
    IMAP_PORT="993"

RUN apt-get update > /dev/null && apt-get install -y cron vim rsyslog > /dev/null
RUN service rsyslog start
RUN crontab -l | { cat; echo '* * * * * cd /usr/src/redmine && bundle exec rake -f /usr/src/redmine/Rakefile redmine:email:receive_imap RAILS_ENV="production" host=$IMAP_HOST port=$IMAP_PORT ssl=1 username=$SMTP_USER password=$SMTP_PASSWORD -r "openssl" -E "OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE"'; } | crontab -

docker-compose.yml

version: '3.1'
services:
  redmine:
    #image: redmine
    build: '.'
    restart: always
    ports:
      - 80:3000
    volumes:
      - 'redmine_data:/redmine'
    environment:
      REDMINE_DB_MYSQL: db
      REDMINE_DB_PASSWORD: <password>
      REDMINE_SECRET_KEY_BASE: <secretkey>

  db:
    image: mysql:5.7
    restart: always
    volumes:
      - 'db_data:/db'
    environment:
      MYSQL_ROOT_PASSWORD: <password>
      MYSQL_DATABASE: redmine

volumes:
  db_data:
    driver: local
  redmine_data:
    driver: local

标签: linuxdockercronrakeredmine

解决方案


推荐阅读