Вам не нужно писать оболочки (следуя этой логике, вы также можете написать оболочку для оболочки).Пожалуйста, будьте проще.Все, что вам нужно сделать, это настроить вашу задачу cron для запуска оболочки bash и заставить эту оболочку bash загружать вашу среду.
Строка shebang в вашем скрипте должна относиться не непосредственно к исполняемому файлу ruby, а к ruv-ruby:
#!/usr/bin/env ruby
Это указывает сценарию загружать среду и запускать ruby, как если бы мы использоваликомандная строка с загруженным rvm.
Во многих системах, производных от UNIX, crontabs может иметь раздел конфигурации перед фактическими строками, которые определяют задания, которые будут запущены.В этом случае вы должны указать:
SHELL=/path/to/bash
Это обеспечит создание задания cron из bash.Тем не менее, ваша среда отсутствует, поэтому, чтобы дать команду bash загрузить вашу среду, вам нужно добавить в раздел конфигурации следующее:
BASH_ENV=/path/to/environment (typically .bash_profile or .bashrc)
HOME автоматически выводится из строки / etc / passwd строкивладелец crontab, но вы можете переопределить его.
HOME=/path/to/home
После этого задание cron может выглядеть следующим образом:
15 14 1 * * $HOME/rvm_script.rb
Что если ваш crontab не поддерживает раздел конфигурации?Что ж, вам придется указывать все директивы по окружающей среде в одной строке вместе с самой работой.Например,
15 14 1 * * export BASH_ENV=/path/to/environment && /full/path/to/bash -c '/full/path/to/rvm_script.rb'
Полный пост в блоге по теме