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를 얻지 못하는 이유는 무엇입니까? 내 변수와 궁극적으로 openvpn_pid_file에 올바른 PID를 가져오려면 무엇을 변경해야 합니까?

이것은 모두 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의 의견에 있습니다.

에 관해서는

관련 정보