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 openvpn
erhalte 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_pid
leer.
Die Lösung steht in Svens Kommentar.
Wie für