bash할 때 중지

bash할 때 중지

저는 이 bash.sh를 사용하여 장애가 발생할 경우 게임 서버를 시작하고 다시 시작합니다. @reboot로 실행됩니다.

while true; do
./Server
done

이 서버가 다운되면 주기적으로 업데이트해야 합니다. 닫는 것은 불가능해 보입니다. 내가 사용하는 다른 스크립트와 언어에서는

if ($exists(filename.txt)) { halt }

깨지지 않는 프로세스의 while 루프에서는 빈 파일을 프로세스 디렉터리에 넣을 수 있으며 파일이 있으면 스크립트는 스크립트를 중지하고 종료된 후 프로세스를 다시 시작합니다. 이것은 나에게 가장 간단한 해결책처럼 보입니다. 이 상황에서는 어떻게 해야 합니까?

답변1

그것은 다음과 같습니다:

until [ -e filename.txt ]; do
  ./Server
done

그것은 다음과 같습니다:

while [ ! -e filename.txt ]; do
  ./Server
done

Linux를 사용하는 경우 다음과 같이 할 수도 있습니다.

while true; do
  # wait for filename.txt to be removed if it's there:
  inotifywait -qe DELETE_SELF filename.txt 2> /dev/null
  ./Server
done

Server파일이 존재할 때만 시작을 방지하고 파일이 삭제된 후 즉시 다시 시작합니다.

머신의 관리자라면 이를 적절하게 보호하고 필요한 경우 예기치 않은 종료 시 다시 시작(다시 시작)하는 등의 작업을 담당하는 init 시스템에서 처리하는 서비스로 추가하는 것이 더 합리적일 것입니다. 그런 다음 편집 service whatever stop전후 에 작업을 수행합니다 start.

답변2

break다음과 같은 명령을 사용할 수 있습니다 .

while true; do
    ./Server
    if [ -e filename.txt ] ; then
        break
    fi
done

하지만 위 스크립트는 계속 실행되므로 ./Server위험할 수 있습니다 .

관련 정보