실행하기 전에 프로세스를 확인하세요.

실행하기 전에 프로세스를 확인하세요.

안녕하세요. 실행하기 전에 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. Bash에서 올바른 형식을 사용 하지 않고 있습니다 . 특히 및 가 if누락되었습니다 .thenfi

  2. $()서브쉘은 당신이 생각하는 대로 작동하지 않을 수도 있습니다. 종료 코드(일반적으로 테스트하는 코드)가 아닌 내부 명령의 표준 출력을 반환합니다. 플래그를 $(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.htmlif 문에 대한 추가 정보.

관련 정보