linux - 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
解决方案
推荐阅读
- javascript - 需要使用更新对象返回现有数据结构
- python - 一个 x 值的多个 y 值图的标签
- php - 如何在 PHP 中使用 CDATA 创建 SOAP 请求
- json - YAML / OpenAPI:定义键值对,其值具有两个字段(整数和字符串)
- reactjs - 使用 ms graph API 实现 PeerToPeer 调用
- angularjs - 在 Angular 12/11 上找不到名称“MapboxDirections”
- git - 为什么 Sourcetree 需要很长时间才能提交并将更改推送到源?
- python - 中间值作为快速排序中的枢轴
- string - 函数输入和 awk 参数之间的 BASH 名称冲突
- angular12 - 模板引用属性缺失