単一のスクリプトで「デーモン」プロセスを開始した後、どのようにアプリケーションを起動できますか?

単一のスクリプトで「デーモン」プロセスを開始した後、どのようにアプリケーションを起動できますか?

私のサーバーを起動するスクリプトがあります。その前に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"
}

これにより、上記の1行の出力は次のようになります。

started npm
openvpn still running

おすすめ記事