저는 cron을 통해 1분마다 실행되는 Python 프로그램을 실행하고 있습니다. 때로는 CPU를 많이 소모하는데, 그런 경우에는 다음 크론 작업이 실행되지 않도록 해야 합니다. 노력하고있어
if (( `~/cpu_usage.txt` < 60 )); then `cd /path/to/program && python myfile.py 100`; fi
myfile
print bob_here
파일에 위의 충돌을 일으키는 파일이 하나 있습니다.
bob_here: command not found
myfile.py
자체적으로는 잘 작동하므로 문제는 if 문에 있습니다 . 스크립트가 올바르게 실행되도록 하려면 어떻게 해야 합니까?
참고: 여기서는 별로 중요하지 않을 수도 있지만 cpu_usage.txt
현재 CPU 사용량을 인쇄하는 간단한 bash 프로그램입니다.
echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]
답변1
체크 표시를 제거하고 Python 인터프리터의 전체 경로를 제공하세요.
if (( `~/cpu_usage.txt` < 60 )); then python /path/to/program/myfile.py 100; fi
틱은 설계된 대로 키워드 다음에 명령을 실행하기 때문에 틱이 필요하지 않습니다 then
. 틱은 하위 셸을 시작한 다음 결과/출력을 명령으로 사용합니다 if-then
. 이는 원하는 것이 아닙니다.
> if true; then echo OK; fi
> OK
> if true; then `echo OK`; fi
> OK: command not found
편집: 내 경험에 따르면 crontab과 함께 사용하려면 모든 명령을 쉘 스크립트에 넣고 crontab에서 호출하는 것이 좋습니다.
답변2
어쩌면 다음과 같이 분해할 수도 있습니다.
if (( $(vmstat 1 2|awk 'END{print 100-$15}') < 60 )); then
cd /path/to/my/program && ./python myfile.py 100
fi