Mastodon

在 cron job 裡用 rvm

rvm 解決了 server 上有不同版本的 ruby 和 gems 的問題。 但如果後台要行 cron job ,怎樣才能使用 rvm 呢?直接在 cron 裡用 rvm 是不行的。

這其實是個很基本的 cron use case (雖然每隔一段時間我就會忘記...),答案是在 cron 裡開一個新的 bash :

* * * * * /bin/bash -l -c 'cd /var/production/project/current; bundle exec rake cron' > /var/production/project/shared/log/cron.log 2>&1

bash 的 -c 選項告訴它我們要執行某指令、-l 選項讓它載入整個環境。這就是讓 rvm 載入的重點。

這樣辦是因為 cron 不會載入整個 user shell和環境變數,rvm 也自然不能正常運作了。只要記著這點就能在 cron 如常使用 rvm ,再不會有找不到 ruby 或 gems 的問題了。