Как настроить задание cron для отправки электронных писем с напоминаниями в официальном образе Redmine Docker?

В контейнере Redmine, основанном на официальном образе в Docker Hub , я пытаюсь установить настроить cron для периодической отправки электронных писем с напоминаниями.

В соответствии с инструкциями здесь , набрав bundle exec rake redmine: send_reminders RAILS_ENV = production как root внутри контейнера работает нормально. Однако установка той же команды с помощью crontab -e не работает и выводит различные сообщения об ошибках. Я подозреваю, что они как-то связаны с установкой правильного PATH для Bundler или rake, но, не будучи знакомым с приложениями Ruby, я полностью потерялся прямо сейчас. Я даже попытался добавить (казалось бы) соответствующие переменные среды в crontab , например:

PATH=/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
RUBY_MAJOR=2.6
RUBY_VERSION=2.6.5
RUBY_DOWNLOAD_SHA256=d5d6da717fd48524596f9b78ac5a2eeb9691753da5c06923a6c31190abe01a62
GEM_HOME=/usr/local/bundle
BUNDLE_SILENCE_ROOT_WARNING=1
BUNDLE_APP_CONFIG=/usr/local/bundle
RAILS_ENV=production
HOME=/home/redmine
REDMINE_VERSION=4.1.0

, но пока безрезультатно.

Следующее - это то, что я до сих пор пытался добавить в crontab -e . Каждой команде (конечно же) предшествует формат строки даты и времени cron, а за ними следует > /var/log/myjob.log 2> & 1 , чтобы регистрировать все, что она выводит.

  • корневой компакт-диск / usr / src / redmine; связка exec rake redmine: send_reminders RAILS_ENV = production
  • корневой компакт-диск / usr / src / redmine; / usr / local / bin / bundle exec / usr / local / bundle / bin / rake redmine: send_reminders RAILS_ENV = production

Не удалось найти Gemfile или.пакет / каталог

  • cd / usr / src / redmine; / usr / local / bin / bundle exec / usr / local / bundle / bin / rake redmine: send_reminders RAILS_ENV = production
  • /usr/src/redmine/remind.sh (следующий скрипт)

напомнить .sh

#!/bin/bash
cd /usr/src/redmine
bundle exec /usr/local/bundle/bin/rake redmine:send_reminders days=7 RAILS_ENV="production"
 bundler: не удалось загрузить команду: / usr / local / bundle / bin / rake 
 (/ usr / local / bundle / bin / rake) Bundler :: GemNotFound: не удалось найти {{1 }} rake-13.0.1 в любом из источников 
 / usr / local / lib / ruby ​​/ 2.6.0 / bundler / spec_set.rb: 91: in `block in 
materialize '/ usr / local / lib / ruby ​​/ 2.6.0 / bundler / spec_set.rb: 85: в 
 `map! ' /usr/local/lib/ruby/2.6.0/bundler/spec_set.rb:85:in
`materialize '/usr/local/lib/ruby/2.6.0/bundler/definition.rb:170 : в 
 `specs '/usr/local/lib/ruby/2.6.0/bundler/definition.rb:237:in
`specs_for' /usr/local/lib/ruby/2.6 .0 / bundler / definition.rb: 226: в 
 `запрошенные_спекеры '
 / usr / local / lib / ruby ​​/ 2.6.0 / bundler / runtime.rb: 108: в` блок в 
метод_определения '
 / usr / local / lib / ruby ​​/ 2.6.0 / bundler / runtime.rb: 20: в `настройке' 
 / usr / local / lib / ruby /2.6.0/bundler.rb:107:in `setup '
 / usr / local / lib / ruby ​​/ 2.6.0 / bundler / setup.rb: 20: in` ' 
 / usr / local / lib / ruby ​​/ 2.6.0 / rubygems / core_ext / kernel_require.rb: 54: в 
 `require '
 / usr / local / lib / ruby /2.6.0/rubygems/core_ext/kernel_require.rb:54:in
`require'
  • root cd / usr / local / bundle / bin / rake; rake --trace redmine: send_reminders RAILS_ENV = production
 rake прервано! Rakefile не найден (ищется: rakefile, Rakefile, 
rakefile.rb, Rakefile.rb) 
 / usr / local / lib / ruby ​​/ gems / 2.6.0 / gems / rake-12.3. 2 / lib / rake / application.rb: 698: в 
 "raw_load_rakefile" 
 / usr / local / lib / ruby ​​/ gems / 2.6.0 / gems / rake-12.3.2 / lib / грабли / приложение.rb: 104: в 
 `block in load_rakefile '
 / usr / local / lib / ruby ​​/ gems / 2.6.0 / gems / rake-12.3.2 / lib / rake / application.rb : 186: в 
 `standard_exception_handling '
 / usr / local / lib / ruby ​​/ gems / 2.6.0 / gems / rake-12.3.2 / lib / rake / application.rb: 103: в 
 `load_rakefile '
 / usr / local / lib / ruby ​​/ gems / 2.6.0 / gems / rake-12.3.2 / lib / rake / application.rb: 82: in {{ 1}} `block in run '
 / usr / local / lib / ruby ​​/ gems / 2.6.0 / gems / rake-12.3.2 / lib / rake / application.rb: 186: in {{1 }} `standard_exception_handling '
 / usr / local / lib / ruby ​​/ gems / 2.6.0 / gems / rake-12.3.2 / lib / rake / application.rb: 80: in 
` запустите '/usr/local/lib/ruby/gems/2.6.0/gems/rake-12.3.2/exe/rake:27:in
`' / usr / local / bundle / bin / rake: 23: в `load '
 / usr / local / bundle / bin / rake: 23: в` 
'

Вот что находится внутри / usr / src / redmine . Файл с именем Gemfile существует.

root@975094a2b06b:/usr/src/redmine# ls -l
total 140
-rw-rw-r--  1 redmine redmine  538 Dec 20  2019 CONTRIBUTING.md
-rw-rw-r--  1 redmine redmine 2937 Dec 20  2019 Gemfile
-rw-rw-rw-  1 redmine redmine 5665 Apr 21  2020 Gemfile.lock
-rw-r--r--  1 root    root    5491 Feb 27  2020 Gemfile.lock.mysql2
-rw-r--r--  1 root    root    5483 Feb 27  2020 Gemfile.lock.postgresql
-rw-r--r--  1 root    root    5493 Feb 27  2020 Gemfile.lock.sqlite3
-rw-r--r--  1 root    root    5645 Feb 27  2020 Gemfile.lock.sqlserver
-rw-rw-r--  1 redmine redmine  205 Dec 20  2019 README.rdoc
-rwxrwxr-x  1 redmine redmine  275 Dec 20  2019 Rakefile
drwxrwxr-x  6 redmine redmine 4096 Dec 20  2019 app
-rw-rw-r--  1 redmine redmine  863 Dec 20  2019 appveyor.yml
drwxrwxr-x  2 redmine redmine 4096 Dec 20  2019 bin
drwxr-xr-x  1 redmine redmine 4096 Mar 26  2020 config
-rw-r--r--  1 root    root     136 Mar 10  2020 config.ru
drwxrwxrwx  1 redmine redmine 4096 Mar 26  2020 db
drwxrwxr-x  2 redmine redmine 4096 Dec 20  2019 doc
drwxrwxr-x  5 redmine redmine 4096 Dec 20  2019 extra
drwxr-xr-x  3 redmine redmine 4096 Oct 19 10:16 files
drwxrwxr-x  6 redmine redmine 4096 Dec 20  2019 lib
drwxr-xr-x  2 redmine redmine 4096 Mar 18  2020 log
drwxr-xr-x  5 redmine redmine 4096 Mar 26  2020 plugins
drwxrwxr-x  1 redmine redmine 4096 Dec 20  2019 public
-rwxr-xr-x  1 root    root     125 Dec 17 16:24 remind.sh
drwxrwxrwx  2 redmine redmine 4096 Feb 27  2020 sqlite
drwxrwxr-x 14 redmine redmine 4096 Dec 20  2019 test
drwxr-xr-x  1 redmine redmine 4096 Feb 27  2020 tmp
drwxrwxr-x  2 redmine redmine 4096 Dec 20  2019 vendor

Какая команда является правильной?

1
задан 22 December 2020 в 11:05
1 ответ

Оказалось, что crond, включенный в BusyBox, может выполнить bundle exec rake... команду без проблем. Возможно, он обрабатывает переменные окружения иначе, чем стандартный crond?

Все, что мне пришлось сделать, это

apt-get install busybox-static
busybox crontab -e

добавить следующее задание в список crontab.

0 7 * * 1-5 cd /usr/src/redmine; bundle exec rake redmine:send_reminders RAILS_ENV=production

Пожалуйста, обратите внимание, что на данный момент эти шаги были выполнены вручную внутри запущенного контейнера Redmine. Я добавлю их в Dockerfile позже.

0
ответ дан 24 April 2021 в 01:05

Теги

Похожие вопросы