首先,如果问题相对宽泛,我道歉。也许有人可以相应地重新说出来。
我编写了下面的脚本来详细说明我的bash技巧,但if语句只有在我手动启动python脚本时才能证明是“监视”。
bash script = run_deamon.sh
python script = deamon.py
如果我手动运行./deamon.py然后手动运行./run_deamon.sh,bash脚本会回显“Python deamon.py running ...”。然后我可以继续杀死deamon.py进程和我的bash脚本回声“启动Python deamon.py ...”。在bash脚本启动deamon.py后,它不再回声“Python deamon.py正在运行......”有人可以解释我做错了吗?
我想要输出bash脚本:
Python deamon.py running...
Python deamon.py running...
Python deamon.py running... (I now kill deamon.py)
Starting Python deamon.py...
Python deamon.py running...
Python deamon.py running...
等...
我尝试了以下内容:
while true; do
if [[ $(ps ax | grep 'deamon.py$') ]]; then
echo Python deamon.py running...;
else
echo Starting Python deamon.py...;
/home/bang/Documents/Python/./deamon.py;
fi
sleep 1
done
和
while true; do
if [[ $(ps ax | grep 'deamon.py$') ]]; then
echo Python deamon.py is running...;
fi
if ! [[ $(ps ax | grep 'deamon.py$') ]]; then
echo Starting Python deamon.py...;
/home/bang/Documents/Python/./deamon.py;
fi
sleep 1;
done
同样的行为。
如果有人能指出我正确的方向,我们非常感激。
编辑#1
我用过
if [[ $(ps ax | grep 'deamon.py$' | grep -v grep) ]]; then
和
if [[ $(ps ax | pgrep -f 'deamon.py$' ]]; then
结果相同。我在我的python脚本中添加了一个print语句,现在bash脚本正在回显print语句:
23
24
25
Starting Python deamon.py...
0
1
2
3
这是我的python脚本:
from time import sleep
x = 0
while True:
print(x)
if x == 25:
exit(0)
x += 1
sleep(1)
答案 0 :(得分:3)
您需要在后台运行deamon.py
进程并将控制权返回给脚本,如:
/home/bang/Documents/Python/./deamon.py & ;
否则,脚本将等待deamon.py
完成后再继续。
答案 1 :(得分:0)
从grep中排除grep。
当您运行ps ax | grep 'deamon.py$'
时,deamon.py$
将出现在ps列表中。你得到一个误报:守护进程可能没有运行,但你永远不会知道,因为你总是与grep匹配。
强力方法是将shell命令更改为
ps ax | grep 'deamon.py$' | grep -v grep