루비를 cron으로 실행하는 스크립트로 이동할 준비
6093 단어 ShellScriptBashCentOScrontab루비
이 기사에서 쓰기
Ruby를 지금까지 움직이지 않았던 환경에서, cron에서 실행하는 shell Script로 호출하고 싶을 때에 무엇이 필요했는지 잊지 않도록 써 둔다.
이 기사에서 쓰지 않는 것
어떻게 ruby를 install하는가? 그리고 install 때까지 주저하기 쉬운 오류와 같은 사례별 해결 단계.
이 기사에서 쓰고 싶은 것은 어디까지나 cron에서 실행되는 shell script에서 실행 환경을 정돈하는 부분입니다.
미리 양해 바랍니다.
참고로 해 주신 분들의 링크집 감사합니다.
현장의 팀 멤버 여러분에게도 도와 주셨습니다.
실행 환경
$ cat /etc/redhat-release
CentOS release 6.2 (Final)
결론
다음 세 가지를 수행해야했습니다.
1. 우선 루비를 넣는다.
이번에는 rbenv를 통해 도입했다.
자세한 내용은 Github rbenv | README를 참조하십시오.
$ ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
루비가 들어간 것을 확인할 수 있었습니다.
실행하고 싶은 스크립트 이미지
test_ruby.sh
#!/bin/bash
ruby test.rb
실행할 cron 설정
crontab
00 12 * * * /bin/bash /home/user_name/test_ruby.sh > /home/user_name/log/test_ruby.log 2>&1
이것으로, 「갈 수 있을 것이다!」라고 생각하고 있었습니다.
실행할 수 없었습니다.
/home/user_name/log/test_ruby.log
/home/user_name/test_ruby.sh: line 3: ruby: command not found
왜. . 라고 생각했습니다.
다음에서 대응해야 할 항목의 2와 3에 대해 씁니다.
2. 쉘 스크립트에서 루비를 명시 적으로로드합니다.
원래 rbenv는 어디에 있는지 확인.
$ which rbenv
/home/user_name/.rbenv/bin
그래서 스크립트를 수정하는 방법.
test_ruby.sh
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
rbenv shell 2.7.1
ruby -v
다시 실행하면,
$ /bin/bash /home/user_name/test_ruby.sh
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
왔다!
여기서 선배 엔지니어의 중얼거림이 분보에 도착했습니다.
🐈 「cronはPATHが独自だった気がする」
맞습니다. 단지 shellscript의 실행은 아니고, cron 경유로의 실행입니다.
즉, 여행은 아직 도중이었습니다.
3. cron에서는 독자적인 PATH가 읽히기 때문에, cron에 ruby를 읽어들일 수 있도록 path를 통과시킨다.
원래 PATH가 어떻게 되어 있는지,
/etc/crontab
를 확인./etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
과연. 확실히, rbenv에의 PATH가 등록되어 있지 않다.
/etc/crontab
를 변경하는 것이 옳은지 어떨지 모르겠지만, 이번에는 crontab -e
에서 PATH 선언을 추가했습니다.crontab
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/user_name/.rbenv/bin
움직이는지 확인.
crontab
01 15 * * * /bin/bash /home/user_name/test_ruby.sh > /home/user_name/log/test_ruby.log 2>&1
이런 식으로 시도를 cron을 통해 실행하려고했습니다.
실행 후
$ less /home/user_name/log/test_ruby.log
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
제대로 ruby를 사용할 수있는 상태가 된 것을 확인할 수있었습니다!
마지막으로
틀린 곳 등 있으시면 코멘트에서 지적해 주시면 감사하겠습니다.
읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(루비를 cron으로 실행하는 스크립트로 이동할 준비), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/xxl/items/88108f9ef70eafab395c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)