development

crontab에 대해 virtualenv를 설정하는 방법은 무엇입니까?

big-blog 2020. 11. 6. 21:00
반응형

crontab에 대해 virtualenv를 설정하는 방법은 무엇입니까?


Python 스크립트를 실행하기 위해 crontab을 설정하고 싶습니다.

스크립트는 다음과 같습니다.

#!/usr/bin/python
print "hello world"

해당 Python 스크립트를 실행할 virtualenv를 지정할 수있는 방법이 있습니까? 쉘에서는 다음과 같이합니다.

~$ workon myenv

virtualenv를 활성화하기 위해 crontab에서 할 수있는 것과 동등한 것이 있습니까?


"workon"을 사용하는 경우 실제로 virtualenv 위에있는 또 다른 추상화 계층 인 "virtualenv wrapper"를 사용하고 있습니다. virtualenv 루트 디렉터리로 cd'ing하고 다음을 실행하여 virtualenv 만 활성화 할 수 있습니다.

source bin/activate

workon은 virtualenv가 아닌 virtualenv 래퍼에서 제공하는 명령이며 일반 virtualenv에 반드시 필요하지 않은 몇 가지 추가 작업을 수행합니다. 정말 필요한 것은 virtualenv 루트 디렉토리의 bin / activate 파일을 소싱하여 virtualenv를 "활성화"하는 것입니다.

다음을 수행하는 bash 스크립트를 호출하도록 crontab을 설정할 수 있습니다.

#! /bin/bash    
cd my/virtual/env/root/dir
source bin/activate

# virtualenv is now active, which means your PATH has been modified.
# Don't try to run python from /usr/bin/python, just run "python" and
# let the PATH figure out which version to run (based on what your
# virtualenv has configured).

python myScript.py

저에게 잘 맞는 또 다른 솔루션 ...

0    9    *    *    *    /path/to/virtenv/bin/python /path/to/cron_script.py

나는 virtualenv에서 직접 파이썬을 사용하는 것을 선호합니다 ...


bash를 사용하면 모든 명령 time을 래퍼하는 방법과 마찬가지로 모든 명령 을 호출 하는 데 사용할 수있는 일반 가상 환경 래퍼를 만들 수 있습니다 .

virt_env_wrapper.bash:

#!/bin/bash    
source path/to/virtual/env/bin/activate
"$@"

Bash의 마법 주문 "$@"은 원래 명령 줄의 모든 토큰을 다시 이스케이프하므로 다음을 호출 할 수 있습니다.

virt_env_wrapper.bash python foo.py bar 'baz blap'

foo.py볼 것 sys.argv의를['bar', 'baz blap']

참고 URL : https://stackoverflow.com/questions/4150671/how-to-set-virtualenv-for-a-crontab

반응형