在 Bash 脚本中获取 OpenVPN 客户端的进程 ID

在 Bash 脚本中获取 OpenVPN 客户端的进程 ID

在 bash 脚本中我以客户端形式启动 openvpn,如下所示:

#!/bin/bash
conf_file=/etc/openvpn/blahblah.conf
openvpn_pid_file="/var/run/openvpn-client/ovpnc.pid"
command_line="/usr/bin/openvpn --config $conf_file --daemon"
$command_line
openvpn_pid=$!
echo "openvpn_pid=$openvpn_pid"
echo $openvpn_pid >> "$openvpn_pid_file"

成功启动 openvpn 后,我的变量 openvpn_pid 为空,openvpn_pid_file 也为空。但是,pgrep openvpn它会给我 PID。为什么我在脚本中没有得到那个 PID?我应该做哪些更改才能在变量中获取正确的 PID,并最终将其放入 openvpn_pid_file 中?

这一切都在 Arch Linux 上。

答案1

man bash

   !      Expands  to  the  process ID of the job most recently placed into the background, whether executed as an asynchronous command or using the bg              builtin

换句话说:$!仅当进程在后台时才包含一个值。因为你没有将进程置于后台从 shell 中$!为空,因此,openvpn_pid为空。

至于解决方案,它在 Sven 的评论中。

至于

相关内容