R로 리눅스 cron 작업할 때 조심할 점(crontab)

 crontab은 cron 작업을 아주 편하게 할 수 있도록 돕는 도구다.

편한 만큼 조심할 점도 있다.

온라인을 검색하면 crontab 사용법을 찾을 수 있다. 작업 편집을 하려면,

$ crontab -e

그리고 nano 같은 도구를 골라 적당히 다음과 같은 작업을 쓰면 될 것 같이 설명이 나온다.


* * * * * my_run.sh


아마 다음과 같은 링크들을 찾을 수 있을 것이다.

https://jdm.kr/blog/2
https://nahosung.tistory.com/95
https://kibua20.tistory.com/89

R 사용자가 위 링크만 보고 crontab을 건드리면 정말 어렵고 힘든 길을 가야 한다. 왜냐하면 중요한 것들이 아무것도 설명되지 않았기 때문이다.

crontab -e 로 실행되는 파일은 기본적으로 PATH가 설정되지 않았다. 따라서 PATH와 작업 HOME을 모두 설정해 줘야 한다.

우선 터미널에서 PATH를 확인하여 어디 적어두자.

$ echo $PATH

이제 Rscript로 실행시킬 폴더 경로를 pwd 명령어로 알아내자.

crontab -e를 실행 한 다음 가장 먼저 해 줄 것은 위에서 얻은 PATH와 실행파일(.sh)이 있는 경로를 HOME으로 설정하는 것이다.

PATH=/usr/local/sbin:usr/local/bin:/usr/sbin:/sbin:/bin
HOME=/home/mycom/myfolder

예를 들면 위와 같다. 이렇게 한 다음에 cron을 설정할 때 또 주의해야 한다. /home/mycom/myfolder/run.sh를 실행하려면

* * * * * ./run.sh

이렇게 해야 하고, run.sh의 권한을 766으로 바꿔줘야 한다.

$ chmod 766 run.sh

이것이 끝이 아니다.

$ R
> .libPaths()
[1] ...
[2] ...

이렇게 경로가 나올 것이다. 여러분이 그냥 R로 실행했을 때 정상적으로 불러와지는 라이브러리도 cron으로 하면 안될 수도 있다. 따라서 현재 보이는 .libPaths()의 경로를 어디 잘 적어두라. 그리고 cron으로 실행시킬 파일, 예를 들어 main.R의 가장 윗부분에 해당 경로를 추가한다.

main.R
#가장 윗부분
libpath=c("...","...","...")
.libPaths(libpath)

많은 문제가 해결될 것이다.
참고로 출력 결과를 로그로 관리하고 싶다면
crontab -e 를 한 뒤 설정에서

* * * * * ./run.sh >> runningr.log 2&1

이렇게 runningr.log 파일을 생성한다.


댓글

이 블로그의 인기 게시물

Bradley-Terry Model: paired comparison models

R에서 csv 파일 읽는 법

xlwings tutorial - 데이터 계산하여 붙여 넣기