如果某些内容正在运行,如何检入bash脚本,如果是,则退出

Rya*_*zel 10 bash scripting

我有一个每15分钟运行一次的脚本,但有时如果盒子忙,它会挂起,下一个过程将在第一个完成创建雪球效果之前开始.如何在bash脚本中添加几行以在启动之前检查某些内容是否先运行?

rod*_*ion 13

pidof -x如果您知道进程名称,或者kill -0您知道PID ,则可以使用.

例:

if pidof -x vim > /dev/null
then
    echo "Vim already running"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)


Bor*_*éry 5

为什么不设置锁文件?

就像是

yourapp.lock

只需在处理完成后将其删除,并在启动之前检查它.

它可以使用

if [ -f yourapp.lock ]; then
echo "The process is already launched, please wait..."
fi
Run Code Online (Sandbox Code Playgroud)


小智 3

代替 pidfiles,只要您的脚本具有唯一可识别的名称,您就可以执行以下操作:

#!/bin/bash
COMMAND=$0
# exit if I am already running
RUNNING=`ps --no-headers -C${COMMAND} | wc -l`
if [ ${RUNNING} -gt 1 ]; then
  echo "Previous ${COMMAND} is still running."
  exit 1
fi
... rest of script ...
Run Code Online (Sandbox Code Playgroud)

  • 我这样做了,但我必须稍微调整一下。首先,命令包含完整路径,因此除非您从同一目录运行它,否则它不起作用。无论如何,我硬编码了这个名字。其次,由于某种原因 ps --no-headers -C${COMMAND} | wc -l 总是返回 1,没有任何运行,并且由于此脚本在检查另一个 1 时正在运行,因此它总是返回 2。我必须将 -gt 1 更改为 -gt 2 并且它起作用了。谢谢。 (3认同)