如何制作一个 bash 脚本来确定程序是否已经在运行

如何制作一个 bash 脚本来确定程序是否已经在运行

我正在制作一个 python 程序,我计划通过 bash 脚本启动它。然而,当计算机尝试启动该程序两次时,该程序会表现得很糟糕。由于我实际上只需要启动该程序一次,因此如何判断该程序是否已在运行。

答案1

一种方法是记录 python 进程的 PID,然后/var/runbash 脚本可以查看具有该 PID 的文件是否存在,以及是否存在该 PID 是否仍在运行。

另一种可能性是用来pgrep查看进程是否正在运行,如果名称中有足够独特的部分(python 可能太常见而无法使用,但 py 脚本本身可能会工作)。例如:

if pgrep -f "python yourScript.py" &>/dev/null; then
    echo "it is already running"
    exit
else
    python yourScript.py
fi

假设yourScript.py会将自身守护进程或类似的东西

答案2

如果你的 bash 脚本被调用my_script.sh,然后将其添加到顶部:

#!/bin/bash
for pid in $(pidof -x my_script.sh); do
    if [ $pid != $$ ]; then
        exit 1
    fi 
done
python python_app.py

它将列出所有相关的 PIDmy_script.sh并验证它们是否与我们当前正在运行的进程相同。如果没有,则退出脚本。

答案3

尝试使用 ps -ef

  #!/bin/bash
  export me=`basename $0`
  if [[ -n $(ps -ef | grep $1 | grep -v grep | grep -v $me) ]]; then      
     echo "the program is running";
  else     
    echo "not running"; 
  fi

答案4

锁定文件可能是一种更优雅的方法。当你的程序启动时,它会检查是否有锁,如果有,它就会停止。如果没有,它会创建一个并继续运行。

这也是一种有用的方法,可以让您了解程序在锁定文件上运行了多长时间。

前几天我正在研究这个问题,发现了这篇文章:确保只有 1 个 bash 脚本副本正在运行的最佳方法是什么?

相关内容