crontab의 경로에 변수 사용

crontab의 경로에 변수 사용

내가 사용하는 crontab은 더 복잡하지만 문제를 최소한의 문제 세트로 분류했습니다.

내 crontab은 다음과 같이 작동합니다.

mypath='/home/user/opt/script_home'
myscript='/home/user/opt/script_home/myscript.py'
* * * * * "$myscript"

하지만 이렇지는 않습니다:

mypath='/home/user/opt/script_home'
myscript="${mypath}/myscript.py"
* * * * * "$myscript"

maildir의 오류 메시지:

/bin/sh: ${mypath}/myscript.py: No such file or directory

Python 인터프리터는 제한된 cron $PATH에서 사용할 수 있으므로 문제가 되지 않습니다.

편집: 또한 bash 또는 sh를 사용하여 crontab을 실행하면 오류 없이 실행됩니다. (물론 * * * * * 제거 후)

여기서 아주 기본적인 내용을 놓치고 있을 수도 있지만, 한동안 그것에 대해 머리를 감고 웹을 검색했습니다. 하지만 지금까지 검색 매개변수로는 운이 없었습니다. crontab은 여러 위치에서 공통 경로를 추악하게 사용하여 작업하고 있지만 이는 좋은 코드가 아니므로 귀찮습니다. 저의 고통에서 저를 도와주세요 =)

답변1

요약: 그럴 수는 없습니다.

~에 따르면man 5 crontab

값 문자열은 환경 대체 또는 변수 대체를 위해 구문 분석되지 않으므로 다음과 같은 줄이 있습니다.

PATH = $HOME/bin:$PATH

예상대로 작동하지 않습니다.

cron의 파서는 bash'만큼 강력하지 않습니다.

답변2

.bash_profile 또는 .bashrc 파일에서 이 변수를 mypath로 구성하면 액세스할 수 있습니다.

vi .bash_profile or vi .bashrc 

그런 다음 아래 경로를 추가하고 저장하십시오.

 mypath='/home/user/opt/script_home'

답변3

cron은 대화형 쉘도 아니고 로그인 쉘도 아니기 때문에 .bashrc나 .bash_profile도 소스가 아닙니다. 따라서 해당 파일에 mypath를 정의하면 cron을 사용하는 동안 해당 변수가 없습니다. 내가 아는 한, cron에 이를 포함하는 유일한 방법은 crontab 스크립트에서 직접 정의하는 것입니다(즉, 앞에서 설명한 것처럼 환경 대체나 변수 대체 없이).

관련 정보