我正在通过 cron 运行一个 python 程序,每 1 分钟运行一次。有时,它会消耗大量 CPU,如果是这种情况,我需要下一个 cron 作业不运行。我在尝试
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
是一个简单的 bash 程序,用于打印当前的 cpu 使用情况:
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
您不需要勾选,因为 shell 将then
按照设计执行关键字后面的命令;刻度线将启动一个子 shell,然后将结果/输出用作 的命令if-then
,这不是您想要的:
> if true; then echo OK; fi
> OK
> if true; then `echo OK`; fi
> OK: command not found
编辑:根据我的经验,如果你想将它与 crontab 一起使用,最好将所有命令放在 shell 脚本中并从 crontab 调用它。
答案2
也许把它分解成
if (( $(vmstat 1 2|awk 'END{print 100-$15}') < 60 )); then
cd /path/to/my/program && ./python myfile.py 100
fi