system
не всякий раз, когда тип задания. Это Kernel.system
, который выполняет переданную ему строку, когда выполняется всякая команда, вместо преобразования этого синтаксиса String в cron. Похоже, что вы на самом деле имеете в виду:
command "for line in `cat config/myEnvFile.env` ; do export $line ; done"
# Note: command instead of system
command
является встроенным типом задания определяется когда это here.
Каждая строка кода внутри every
-block работает как собственная команда. Если вы запустите whenever
(без каких-либо аргументов, поэтому он просто отображает то, что он будет положить в ваш crontab без фактического изменения crontab, и после внесения исправления, описанного выше), вы увидите, что результат выглядит примерно так:
30 2 * * * * /bin/bash -l -c 'for line in `cat config/myEnvFile.env` ; do export $line ; done'
30 2 * * * * /bin/bash -l -c 'cd /path/to/project && RAILS_ENV=production bundle exec rake task:continue_doing_my_task --silent > my_log_file.log 2&>1'
Примечание 2 вопроса:
Во-первых, эти 2 команды не имеют ничего общего друг с другом - они работают как 2 совершенно разных процессов.
Первый работает в каталоге по умолчанию cron, который, вероятно, не, где находится config/myEnvFile.env.
Чтобы исправить это, вам необходимо объединить все в одну команду. При использовании всякого типа rake
у вас будет в конечном каталоге, но вы все равно должны экспортировать все эти переменные.
Один из способов сделать это - переименовать файл .ruby-env
и использовать rvm. rvm, помимо управления версиями ruby для вас, автоматически загрузит все переменные среды, определенные в .ruby-env
, когда вы входите в каталог.
Если RVM не является для вас вариантом, или вы хотите что-то более легкое, переименуйте файл .env
и используйте dotenv. Их README документы точно, как использовать драгоценный камень, с или without Rails. Без Rails, это так легко: