2013-08-19 2 views
2

를 유지 - 내가 있는지 확인하는시작 유닉스 백그라운드 프로세스는 I 백그라운드에서 많은 프로세스를 시작해야합니다 이러한 프로세스를 만들기 위해 nohup을 사용하는 스크립트가 실행에 유지 한 순서

nohup "./$__service_script1.pl" $__service_args </dev/null> /var/log/$__service_name.log 2>&1 & 

문제는 중요하다 프로세스는 호출 순서대로 시작됩니다. 다른 프로세스를 시작하기 전에 프로세스가 시작될 때까지 기다리는 방법입니까?

나는 기다렸다가 프로세스가 완료 될 때까지 기다렸다가 프로세스가 시작되었는지 확인하려고합니다. 아마도 가장 간단한 해결책은 프로세스 간 몇 초 동안 잠을 자게하는 것이지만 더 좋은 해결책이 있습니까?

감사합니다.

+2

또 다른 순진한 해결책은'ps | grep $ __ service_name'을 입력하고, 'nohup'을 얻지 않도록주의하십시오. 또는 서비스를 포크하고 시작하고 PID가 나타날 때까지 기다린 후 초기화 스크립트에 알리는 프로그램을 작성하여 추가 부트 스트랩 레벨을 추가 할 수 있습니다. 귀하의 서비스 중 하나를 다시 시작해야하는 즉시, 서비스가 고장 났을 것입니다. 이것은 초기 시동 중에도 발생할 수 있습니다. – paddy

+2

하나의 _umbrella_ 마스터 스크립트에서 호출하고 마스터 스크립트 만 NOHUP? (또는 그들 모두를 연결하고 전체 묶음을 호출하거나 체인을 연결하십시오) – wildplasser

+0

그 작업은 하나의 마스터 스크립트와 nohup 마스터 스크립트에서이 스크립트를 호출 한 후 해당 스크립트에서 시작된 프로세스가이 스크립트를 종료 한 후에 죽지 않도록해야합니까? 이 솔루션을 사용해보십시오. –

답변

1

"확실히 시작됨"의 의미에 따라 다릅니다. fork (2)가 완료되고 새 프로세스가 존재한다는 것을 의미하면 nohup이 리턴 할 때까지 각 프로세스가 시작됩니다. 새로운 프로세스가 생성되었습니다.

문제는 쉘이 돌아 오기 전에 nohup'ed 프로세스가 실행되는 시간을 보장 할 수 없다는 것입니다. 시작한 프로세스가 "확실히 시작되었습니다"는 프로세스가 초기화를 위해 수행하는 작업에 따라 다릅니다. 응용 프로그램의 소스가 없거나 다른 이유로 응용 프로그램의 소스를 수정할 수없는 경우 해당 출력을 보는 것으로 제한됩니다. 많은 디먼은 초기화의 여러 단계에서 로그 메시지를 출력합니다. 당신은 로그 파일을

  1. 봐에 스크립트를 수정하고 (이전 호출에서 오류 메시지를 피하기 위해 마지막에) 읽어
  2. 열기 로그 파일이 존재하지 않는 경우는, 하늘을 만들 수 있습니다 이 작업을 할 수처럼 로그 파일
  3. 대기가 떠들썩한 파티에서

를 감시자 프로세스가 시작 나타내는 로그 메시지,

  • 이 nohup을 사용하여 프로세스를 시작하기위한보고, 그것은 (이 코드를 보일 것이다 ~이다.) 완전히 검증되지 않은 :

    log=<path to log file> 
    msg=<message service prints when it is ready> 
    svc=<path to service> 
    
    # Create log file if it does not exist 
    if [ ! -f "$log" ] ; then 
        echo > "$log" 
    fi 
    
    # watch for message to appear on a single line in the log file 
    tail -0 -f "$log" | egrep "$msg" | head -1 & 
    ready_pid=$! 
    
    # Start the service 
    nohup "$svc" </dev/null>> "$log" 2>&1 & 
    
    # Wait for the message 
    wait $ready_pid 
    

    당신은 서비스를 분기하기 전에 로그 파일보기를 시작할 그렇지 않으면 때문에, 메시지가 로그 파일에 첨부 할 수있는 서비스를 시작 스크립트 전에 로그로 갈 수 있습니다.

  • 관련 문제