오늘은 crontab에 작업을 등록시켜두려고 하는데, crontab에서 주기적으로 sh을 실행시키고, 이 sh에서 파이썬 파일들을 실행시키는 구조였다.
그런데 sh에서 파이썬을 실행시킬 때 아무리해도 conda의 가상환경이 불러와지지 않고, 기본 파이썬 환경을 불러와서 라이브러리 오류들이 떴다. 뒤지고 뒤진 끝에 알아내서 나중에 까먹을까봐 적어두려고 한다.
아래 코드를 자신이 실행시키려는 sh의 최상단에 등록해 두면 된다.
# crontab에 등록할 sh 파일
#!/bin/bash
export PATH=/home/bch/miniconda3/bin:/home/bch/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin:/usr/bin/obsidian
source /home/bch/miniconda3/etc/profile.d/conda.sh
conda activate /home/bch/miniconda3/envs/{ENV_NAME}
conda info >> logs/conda_active.log
우선 crontab에서 bash shell을 불러올 때, 환경변수들을 불러오지 못한다고 한다.
따라서 자신의 환경변수들을 모두 다시 한번 등록해주고, `conda.sh`을 활성화 시켜준뒤, 자신의 가상환경을 절대경로로 참조해 준다. 이후 log를 등록해서 자신의 가상환경이 제대로 등록되었는지 확인할 수 있었다.
+) 추가적으로 원래 가장 상단에 `#!/bin/bash`를 사용함으로써 sh파일을 bash에서 시작해야하는데 왜 그런지는 모르겠지만 계속
`source command not found` 오류가 떴다.
그래서 crontab에 작업을 등록할 때 가장 상단에 `SHELL=/bin/bash`를 등록해주니 해결되었다.
SHELL=/bin/bash
* * * * * /home/bch/gunicorn_server.sh >> /home/bch/logs/start_log.log 2>&1
run a crontab job using an anaconda env
I want to have a cron job execute a python script using an already existing anaconda python environment called my_env. The only thing I can think to do is have the cron job run a script called my_...
stackoverflow.com
Setting conda environments in crontab
I prefer using conda environments to manage python (partly out of familiarity). Conda is a bit different though, in that it is often set up locally for a users environment, and not globally as an i…
andrewpwheeler.com
[Conda] conda activate in shell script file(with cron)
쉘 스크립트 파일 내에서 콘다환경을 활성화 하고 사용하는 방법에 대해 알아본다.
dongle94.github.io
cron에서 bash script 실행시키기
reboot할 때마다 script를 실행시킬 일이 생겨서 cron을 사용하게 되었는데, 삽질을 하면서 알게된 내용을 기술하고자 한다.여러 가지가 엮여있는 내용이라 좀 장황하므로, 맨 마지막 결론만 읽어도
jwcheong0420.github.io