명령줄을 통해 if 문 실행

명령줄을 통해 if 문 실행

저는 cron을 통해 1분마다 실행되는 Python 프로그램을 실행하고 있습니다. 때로는 CPU를 많이 소모하는데, 그런 경우에는 다음 크론 작업이 실행되지 않도록 해야 합니다. 노력하고있어

if (( `~/cpu_usage.txt` < 60 )); then `cd /path/to/program && python myfile.py 100`; fi

myfileprint 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

관련 정보