因此,我有一个脚本,该脚本首先使用awk和ps搜索自身,如果发现任何实例,则杀死每个实例,否则,则执行任何实例。问题在于,由于运行脚本的操作会创建一个进程,因此它总是会找到其自身的实例,因此它永远不会真正执行其他操作并进入杀死自己的循环。
问题是:有没有办法我可以更改正在运行的进程的名称?还是有其他解决此永恒循环的方法?
剧本
#!/bin/bash
asd=$(ps aux | grep -v "color=auto" | grep "S\|R\|S+" | grep "bash asd.sh" | awk '{print $2}')
echo $asd
if [ -z "$asd" ]
then
while true
do
a=$(docker ps -a | awk '/137/ {print $1}')
## si container "a" esta parado por error 137, reiniciar
if [ ! -z "$a" ]
then
docker restart $a
echo "se reinicio el container $a, fallo por falta de memoria (error 137)"
fi
sleep 500
done &
else
echo " #### Matando Script #### "
sudo kill $asd
fi
不要检查进程是否正在运行,请检查有多少进程正在运行。如果超过一个,则表示它正在运行,因为其中一个属于$ 0(实际脚本)。
这是我的解决方案,我在ps命令中添加了wc -l(计数输出行)
#!/bin/bash
asd=$(ps aux | grep -v "color=auto" | grep "S\|R\|S+" | grep "bash asd.sh" | awk '{print $2}' | wc -l)
echo $asd
if [ "$asd" -gt "1" ]
then
while true
do
a=$(docker ps -a | awk '/137/ {print $1}')
## si container "a" esta parado por error 137, reiniciar
if [ ! -z "$a" ]
then
docker restart $a
echo "se reinicio el container $a, fallo por falta de memoria (error 137)"
fi
sleep 500
done &
else
echo " #### Matando Script #### "
sudo kill $asd
fi
nvm,我修复了从grep删除“ s +”并将其添加到grep -v的问题,但是,谢谢,我喜欢您的回答,并且还会添加它
别客气!