2017-05-24 1 views
0

lsof 명령을 사용하여 setup.sh 인스턴스를 하나만 실행하며 인수 값이 없으면 올바르게 작동합니다. 하지만, 예를 들어 setup.sh에서 인수를 전달해야했습니다.lsof linux 명령 인수 값을 사용하여 실행중인 인스턴스를 계산합니다.

setup.sh 기계 1 setup.sh machine2의 setup.sh 머신 3

setup.sh 기계 1 다시 같은 명령이 실행을 실행하는 경우 setup.sh 기계 1이 완료 될 때까지 그래서, 그것은 대기합니다. 나는 lsof가 프로세스를위한 것이고 대기 로직에 대한 다른 좋은 제안이 될 수는 없을 것이라고 생각한다.

내가 lsof 명령에 구문 오류를 전달하는 몇 가지 인수를 전달하려고하면 아래에서 시도했지만 행운이 없습니다. 내 목적은 machine1을 사용하는 인스턴스 하나만 실행되며 setup.sh를 machine1 인수와 함께 실행하려고하면 대기해야합니다. 다른 파일 잠금/대기 논리?

if ([[ $(lsof -t \setup.sh 'machine1'| wc -l) > 1 ]]); then 
if ([[ $(lsof -t '\setup.sh machine1'| wc -l) > 1 ]]); then 
if ([[ $(lsof -t "\setup.sh machine1"| wc -l) > 1 ]]); then 

작업 :
if ([[ $(lsof -t \setup.sh| wc -l) > 1 ]]); then 
    echo -e "\tWaiting for 2 minutes...\n" 
    sleep 2m 
else 
    echo -e "\tFree now to run setup.sh\n" 
fi 

가 작동하지 않습니다 (구문 오류) :
if ([[ $(lsof -t \setup.sh machine1| wc -l) > 1 ]]); then 
    echo -e "\tWaiting for 2 minutes...\n" 
    sleep 2m 
else 
    echo -e "\tFree now to run setup.sh\n" 
fi 
+0

왜'setup.sh' 전에 슬래시를 넣었습니까? – Inian

+0

스크립트가 현재 위치하거나 실행중인 경로입니다. –

답변

0

당신은 다음과 같은 ps -eo args를 사용하여 인수 프로세스를 검색 할 수 있습니다.

ps -eo args | grep '^setup.sh machine1' | wc -l 

사례에 맞게 grep 패턴을 변경해야합니다.

0

그렉의 위키에는 프로세스 관리에 관한 훌륭한 기사가 있습니다. 특히 "How do I make sure only one copy of my script can run at a time?"입니다. lsof은 출력이 lsof인지 확인한 후 계속 진행되는 동안 경쟁 조건이 있기 때문에 하나의 프로세스 만 실행되고 있음을 보장하는 신뢰할 수있는 방법은 아닙니다. 두 프로세스가 거의 동시에 시작되면 둘 다 병렬로 실행됩니다.

관련 문제