如何在单个脚本中启动“守护进程”进程后启动我的应用程序

如何在单个脚本中启动“守护进程”进程后启动我的应用程序

我有一个脚本,可以启动我的服务器。我想在它之前启动 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

相关内容