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