예약된 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
/usr/bin/ruby
작업이 호출될 때 RVM이 로드되지 않고( 대신 시스템을 사용함) gem 종속성이 누락되었기 때문에 이 작업은 실행에 실패하는 경우가 많습니다 .
예약된 작업을 실행하기 전에 crontab이 내 쉘 환경을 로드하도록 하려면 어떻게 해야 합니까? 감사해요.
답변1
단순히 cronjob 작업에서 ~/.bashrc를 소싱하지 않으시겠습니까?
0 1 * * 1-7 /bin/bash -l -c "source ~/.bashrc; cd ~/jobs/rake && rake reports:create >> ~/jobs/logs/cron.log"
답변2
백그라운드 프로세스에서는 로그인 셸을 사용하지 않는 것이 좋습니다.
이 방법을 사용할 수 있습니다.
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 환경이 로드되도록 편집 해야 하는 파일을 가리킵니다 .
크론 작업으로 실행할 스크립트를 작성하세요.
myjob.sh
#!/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"