Linux
在 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 上。
來自
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 的評論中。
至於