그래서 이것은 매우 이상한 질문입니다. 특정 조건에 따라 subprocess.call을 통해 많은 bash 명령을 호출하는 Python 스크립트가 있습니다. 이제 스크립트는 수동으로 잘 실행되지만 cronjob에 넣으면 실패하지만 코드의 특정 부분에 도달할 때만 실패합니다. 코드의 이 부분은 bstat
사용자에 대해 및 명령을 실행합니다. bkill
두 명령 모두에 대해 subprocess.call, subprocess.Popen, subprocess.check_output을 사용해 보았지만 도달할 때마다 멈추고 아무것도 하지 않습니다. 그런 다음 var/spool/mail/root에 이 메시지가 표시됩니다.
File "/root/Desktop/script.py", line 75, in <module>
print subprocess.check_output(['bstat' '-q' 'viz' '-u' ,user,])
File "/usr/lib64/python2.7/subprocess.py", line 568, in check_output
process = Popen(stdout=PIPE, *popenargs, **kwargs)
File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
나는 가능한 모든 명령에 대해 절대 경로를 사용하고, 실행하기 전에 디렉토리를 스크립트 디렉토리로 변경하고, 실행하기 전에 /bin/python을 호출하려고 시도했습니다. 나는 완전히 압도당했습니다. 더 이상한 점은 bash 스크립트를 호출할 때 제대로 작동하는 다른 subprocess.call 명령이 있지만 이 두 명령에 관해서는 무엇을 해야할지 모른다는 것입니다. 중단된 첫 번째 하위 프로세스 명령은 다음과 같습니다.
print subprocess.check_output(['bstat' '-q' 'viz' '-u' ,user,])
답변1
bstat
cron 환경에 $PATH`가 없는 경우 하위 프로세스 호출은 ...에서 또는 프로그램을 찾습니다 . Python 스크립트 내에서도 이러한 프로그램의 전체 경로를 지정하면 작동합니다.bkill
$PATH