
배경 - 시스템에는 두 가지 버전의 Ruby가 설치되어 있습니다. 내가 만든 이 모니터 스크립트를 실행하려면 최신 버전을 사용해야 합니다.
이것은 내 crontab 라인입니다:
0 * * * * /usr/local/rvm/rubies/ruby-2.2.1/bin/ruby /home/nexpose/ruby/console_monitor.rb
내가 이것을 실행할 때 :
/usr/local/rvm/rubies/ruby-2.2.1/bin/ruby /home/nexpose/ruby/console_monitor.rb
예상대로 작동하고 심지어 설계된 대로 이메일을 보냅니다.
syslog를 확인하면 많은 내용이 표시되지 않습니다. 실행되는 것을 확인했지만 오류는 표시되지 않습니다.
# which ruby
/usr/local/rvm/rubies/ruby-2.2.1/bin/ruby
# ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]
이것이 내 PATH 구성과 관련이 있습니까? Ruby 바이너리를 직접 가리켜서 이 문제를 우회하고 있다고 생각했나요?
답변1
크론 작업에는 최소한의 환경 설정이 있다는 점을 기억하세요. 대화형 셸에 표시되는 설정이 없습니다. Cron은 ~/.login
, ~/.bashrc
등을 실행하지 않습니다 .
cron 작업의 오류를 보려면 STDOUT 및 STDERR을 파일로 리디렉션하는 것이 가장 편리하다고 생각합니다. 예를 들어 > /tmp/cron.out 2>&1
crontab 항목에 추가합니다 . 그렇지 않으면 시스템에서 출력을 crontab 소유자에게 보내는 이메일 메시지로 패키징할 수 있습니다.