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 openvpn
vai 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_pid
está vazio.
Quanto à solução, está no comentário do Sven.
Quanto a