下面是我的脚本,该脚本旨在检查“ python3.6”进程是否正在运行。
如果未运行,则执行python代码,否则退出0。
在此bash脚本中我没有看到任何python的活动或进程运行。
请帮助我了解我是否编写了错误的脚本。
非常感谢您的帮助。
预先感谢。
#!/bin/bash
ps x |grep -v grep |grep -c "python3.6"
if [ $? -eq 0 ]; then
bash -c "/home/ubuntu/anaconda3/bin/python3.6 /var/lib/pythoncode/main_progm.py >> /home/ubuntu/Logs.txt"
fi
# End of Script
答案 0 :(得分:2)
if [ $? -eq 0 ]; then
的意思是“如果最后一个命令没有错误退出”。 grep
在找不到内容时返回错误结果;因此,您的if
说:“如果找到了Python进程,请运行另一个Python进程,否则不要紧”。因此,您的代码找不到Python进程,因此也就永远不会启动它(错误地认为孤独的生活根本就没有生命)。
您可以通过多种方式进行更改。您可以将-eq
更改为-ne
。
否则,您甚至不需要显式比较退出代码,因为if
就是这样做的。您可以这样写:
if ps x | grep -v grep | grep -c python3.6
then
# grep found stuff and exited with $? == 0
echo Oops, still running
else
# grep failed and exited with $? != 0
echo Good to go, run it
fi
或者您可以使用产生的计数:
pythoncount=$(ps x |grep -v grep |grep -c "python3.6")
if [ $pythoncount -eq 0 ]
答案 1 :(得分:0)
谢谢大家的帮助和友好合作。
有评论建议,我做了些小改动,bash运行正常。
下面是代码,我希望它可以帮助某人进入类似的情况。
再次感谢您。
#!/bin/bash
ps -x |grep -v grep |grep -c "python3.6" >/dev/null
if [ $? -ne 0 ]; then
bash -c "/home/ubuntu/anaconda3/bin/python3.6 /var/lib/pythoncode/main_progm.py >> /home/ubuntu/Logs.txt"
else
exit 0;
fi