Linux

在 bash 腳本中獲取 openvpn 客戶端的程序 ID

  • September 12, 2018

在 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 上。

來自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 的評論中。

至於

引用自:https://serverfault.com/questions/929623