obter o ID do processo do cliente openvpn no script bash

obter o ID do processo do cliente openvpn no script bash

Em um script bash, estou iniciando o openvpn como um cliente assim:

#!/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"

Após um início bem-sucedido do openvpn, minha variável openvpn_pid está vazia e meu openvpn_pid_file está vazio. Porém, pgrep openvpnvai me dar o PID. Por que não estou recebendo esse PID no meu script? O que devo mudar para obter o PID correto na minha variável e, finalmente, no openvpn_pid_file?

Tudo isso está no Arch Linux.

Responder1

De 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

Em outras palavras: $!só contém um valor se o processo estiver em segundo plano. Porque você não criou um processo em segundo planoda casca, $!está vazio e, portanto, openvpn_pidestá vazio.

Quanto à solução, está no comentário do Sven.

Quanto a

informação relacionada