단일 스크립트에서 "데몬" 프로세스를 시작한 후 어떻게 애플리케이션을 시작할 수 있습니까?

단일 스크립트에서 "데몬" 프로세스를 시작한 후 어떻게 애플리케이션을 시작할 수 있습니까?

내 서버를 시작하는 스크립트가 있습니다. 그 전에 openvpn 클라이언트를 시작하고 싶습니다. 이것은 현재 작업 솔루션입니다.

#!/bin/sh

openvpn --client --config $OVPN_CONFIG &

sleep 10

npm start

sleep다음 줄을 출력하여 openvpn이 성공적으로 실행되고 있는지 확인하고 싶습니다 .

Tue May 14 16:35:50 2019 Initialization Sequence Completed

어떻게 하나요? 이 스크립트는 Docker 컨테이너 진입점 역할을 합니다.

답변1

다음 bash는 단일 라인에서 실행되고 openvpn, 출력을 기다리고 Init... Completed, 즉시 시작되고, npm백그라운드에서 계속 실행됩니다.openvpn

#! /bin/bash
grep -qF 'Initialization Sequence Completed' <(openvpn ...) && npm start

openvpn인쇄 되지 않으면 Init... Completed전체 명령이 openvpn시작되지 않고 종료 됩니다 npm.

나는 설치 openvpn도 하지 않았으므로 npm다음 기능을 사용하여 동작을 시뮬레이션합니다.

openvpn() {
  echo "something something"
  sleep 1
  echo "$(date) Initialization Sequence Completed"
  sleep 1
  echo "openvpn still running" >&2 # prints to stderr so that we see it 
}
npm() {
  echo "started npm"
}

이를 통해 위의 한 줄의 출력은 다음과 같습니다.

started npm
openvpn still running

관련 정보