Holen Sie sich die Prozess-ID des OpenVPN-Clients im Bash-Skript

Holen Sie sich die Prozess-ID des OpenVPN-Clients im Bash-Skript

In einem Bash-Skript starte ich OpenVPN als Client wie folgt:

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

Nach einem erfolgreichen Start von openvpn ist meine Variable openvpn_pid leer und meine openvpn_pid_file ist leer. Ich pgrep openvpnerhalte jedoch die PID. Warum erhalte ich diese PID nicht in meinem Skript? Was muss ich ändern, um die richtige PID in meiner Variable und letztendlich in der openvpn_pid_file zu erhalten?

Dies alles läuft auf Arch Linux.

Antwort1

Aus 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

Mit anderen Worten: $!enthält nur dann einen Wert, wenn der Prozess im Hintergrund ist. Da Sie keinen Prozess im Hintergrund habenaus der Schale, $!ist leer und daher openvpn_pidleer.

Die Lösung steht in Svens Kommentar.

Wie für

verwandte Informationen