2016-06-24 2 views
2

내가 서버 프로세스를 코딩하고있어 충돌이나 파일 변경에 프로세스를 다시 시작하고, 나는 두 가지 조건 중 하나에 프로세스를 다시 시작하는 배쉬 스크립트를 만들고 싶어 :배쉬 스크립트는

  1. 현재 프로세스를 종료는

자체가 하나의 조건에서 출구 안 스크립트를 (이 경우, 즉시 다시 시작) 실행 파일이 수정

  • 을 (이 경우, 약간의 지연 후 다시 시작).

    (단순한 루프 또는 fswatch를 사용하여)이 중 하나를 수행 할 수 있지만 둘 다 수행하려는 시도가 없습니다. Bash 스크립트에서 둘 다 할 수있는 방법이 있습니까?

  • 답변

    1

    내가 fswatch에 익숙하지 않은 해요,하지만 당신은 OPTS하고 파일이 변경 사항에 대해 걱정하고 버퍼링에 대해 걱정하지 않은 경우에만 데이터를 쓸 것이다하도록 경로를 설정 한 가정, 당신은 시도 할 수 있습니다 :

    fswatch $opts $path | while read k; do kill $pid; done & 
    while sleep 1; do # delay 1 second between restarts 
        cmd & 
        pid=$! 
        wait $pid 
    done 
    

    실행 파일이 변경되면 즉시 다시 시작되지 않습니다. 그것을 얻으려면, 당신은 할 수있다 (그러나 나는 그것이 가치있는 생각하지 않습니다) :

    fswatch $opts $path | while read k; do kill $pid; done & 
    while : ; do 
        cmd & 
        pid=$! 
        wait $pid 
        test $? -gt 128 || sleep 1 
    done 
    
    +0

    나는 그 2 경우,'$는'기반 테스트는 신뢰성이 100 % 확실하지 않다. 두 경우 모두 동일한 프로세스의 종료 상태입니다. 그래서 2 개의 실패 사례를 구별 할 수 없을 수도 있습니다 ... fswatch 기반 루프에서 변수를 설정할 수 있습니까 ('shopt -s lastpipe'에 대한 프로세스 리다이렉션이 필요합니다) & while while 루프에서 사용하십시오 ? – anishsane