在 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

換句話說:$!僅當進程處於背景時才包含一個值。因為你沒有後台進程從殼裡,$!為空,因此openvpn_pid為空。

至於解決方案,在Sven的評論中。

至於

相關內容