在使用者 cronjob 中載入登入 shell

在使用者 cronjob 中載入登入 shell

我正在嘗試使用計劃的 cronjob 運行 rake 任務。我的 crontab 看起來像這樣:

0 1 * * 1-7 /bin/bash -l -c "cd ~/jobs/rake && rake reports:create >> ~/jobs/logs/cron.log"  

我帳戶上的 Ruby 由 RVM 提供,透過以下方式載入~/.bashrc(在無互動檢查之前):

# load RVM env
[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# ... rest of logic

一次又一次,該任務無法運行,因為呼叫該任務時未載入 RVM(/usr/bin/ruby而是使用系統的),並且缺少 gem 依賴項。

如何讓 crontab 在執行排程作業之前載入我的 shell 環境?謝謝。

答案1

簡單地在 cronjob 中獲取 ~/.bashrc 不就可以了嗎?

0 1 * * 1-7 /bin/bash -l -c "source ~/.bashrc; cd ~/jobs/rake && rake reports:create >> ~/jobs/logs/cron.log"  

答案2

不建議在背景進程中使用登入 shell。

你可以使用這個方法:

0 1 * * 1-7 ~/.rvm/bin/rvm in ~/jobs/rake do rake reports:create >> ~/jobs/logs/cron.log"

還有rvm cron命令:

rvm help cron

答案3

經過對 @mpapis 的回覆進行一番挖掘後,RVM 網站上似乎有一個頁面詳細說明如何在 cron 執行的腳本中使用特定的 RVM 安裝

基本上,您可以透過執行此命令來找出您想要使用的 RVM(此處使用 ruby​​ 1.9.3):

$ rvm env --path -- 1.9.3-p125

替換您特定的 ruby​​ 版本。這將指向需要編輯的文件,source以便載入所需的 ruby​​ 環境。

編寫要由 cron 作業執行的腳本:

我的工作

#!/bin/bash

# the full path to the RVM env you got from running `rvm env ...`
source ~/.rvm/environments/ruby-1.9.3-p125

# do stuff ...
cd ~/jobs/rake
rake reports:create

確保使文件可執行:

chmod u+x myjob.sh

定時任務

0 1 * * 1-7 bash -c "cd ~/jobs && ./myjob.sh"



嘭!完畢。

相關內容