![cron을 통해 bash 함수에 캡슐화된 Python 스크립트 실행](https://linux55.com/image/168579/cron%EC%9D%84%20%ED%86%B5%ED%95%B4%20bash%20%ED%95%A8%EC%88%98%EC%97%90%20%EC%BA%A1%EC%8A%90%ED%99%94%EB%90%9C%20Python%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EC%8B%A4%ED%96%89.png)
bash 함수로 래핑하는 Python 스크립트가 있습니다. 이 함수를 cron 작업으로 호출하고 싶지만 cron에서 이를 실행할 수 없는 것 같습니다.
기능은 다음과 같습니다:
#!/bin/bash
getmail(){
local interp=/path/python3
local cmd=/path/python-script
local logfile=/path/logfile
if [ "$1" == "-logs" ]; then
$interp $cmd >> $logfile
else
$interp $cmd
fi
}
그런 다음 함수를 가져오고 실행하는 스크립트를 만들었고 cron에서 함수를 호출할 수 있기를 원했습니다.
#!/bin/bash
source /path/getmail
getmail
이 cron 스크립트를 실행 가능하게 만들기 위해 적절한 권한을 할당했지만 cron은 스크립트를 실행하지 않습니다. cron을 통해 Python 스크립트 자체를 실행할 수 있지만 bash 함수로 래핑되지는 않습니다. 나는 단지 이유를 알고 싶습니다. 이것이 cron이 사용하는 인터프리터와 관련이 있을 수 있습니까? cron 탭에 SHELL=/bin/bash를 설정했습니다. 누군가 나에게 이것을 설명해 줄 수 있습니까?
답변1
작동하지 않는다고 어떻게 확신하나요?
사실, 당신이 하는 일은 거의 효과가 있을 것입니다.
두 가지만 언급하면 됩니다.
1. 함수가 포함된 파일의 '#!/bin/bash/'는 필요하지 않으며 파일이 소스로 제공되므로 기능이 없습니다.
2. "-logs" 인수는 인수 없이 (스크립트에서) 함수를 호출하기 때문에 "getmail()" 함수에 절대 포함되지 않습니다.
Bash 스크립트를 다음과 같이 수정하고 다시 시도하십시오.
#!/bin/bash
source /path/getmail
getmail $@
이는 bash 스크립트에 제공된 모든 인수를 함수로 "전달"해야 합니다.