运行前检查进程

运行前检查进程

您好,我正在尝试制作一个在运行前检查 3 个文件的脚本。如果他们正在运行或没有运行。我的代码有什么问题吗?

#!/bin/bash
if [[ ! $(pgrep -f a1.php) ]];  //check if any pid number returned if yes close and exit this shell script    
    exit 1
if [[ ! $(pgrep -f a2.php) ]];  //check if any pid number returned if yes close and exit this shell script 
    exit 1
if [[ ! $(pgrep -f a3.txt) ]];  //check if any pid number returned if yes close and exit this shell script  
    exit 1
else
    php -f a.php; php -f b.php; sh -e a3.txt   //3 files is not running now we run these process one by one
fi

答案1

  1. 您没有if在 bash 中使用正确的格式,特别是您错过了thenfi

  2. $()subshel​​l 可能没有按照你的想法做。它返回内部命令的标准输出,而不是退出代码(这通常是您测试的对象)。要么$(pgrep -c -f a1.php) -gt 0使用-c标志返回匹配进程的数量,要么pgrep -f a1.php > /dev/null使用退出代码会更好。

    [[ ! $(pgrep -f a1.php) ]]在这种情况下可能有效,但[[ $(pgrep -f a1.php) ]]如果多个进程匹配就会失败,因此它很脆弱。

尝试,

if [[ $(pgrep -c -f a1.php) -gt 0 ]]; then
    exit 1
fi
if [[ $(pgrep -c -f a2.php) -gt 0 ]]; then
    exit 1
fi
if [[ $(pgrep -c -f a3.txt) -gt 0 ]]; then
    exit 1
fi

php -f a.php; php -f b.php; sh -e a3.txt

或者另一种选择

pgrep -f a1.php > /dev/null && exit 1
pgrep -f a2.php > /dev/null && exit 1
pgrep -f a3.php > /dev/null && exit 1

php -f a.php; php -f b.php; sh -e a3.txt

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html有关 if 语句的更多信息。

相关内容