通过命令行执行 if 语句

通过命令行执行 if 语句

我正在通过 cron 运行一个 python 程序,每 1 分钟运行一次。有时,它会消耗大量 CPU,如果是这种情况,我需要下一个 cron 作业不运行。我在尝试

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是一个简单的 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

相关内容