在 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 的评论中。
至于