사용자 cronjob 내에 로그인 셸 로드

사용자 cronjob 내에 로그인 셸 로드

예약된 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"



쾅! 완료.

관련 정보