Назад | Перейти на главную страницу

получить идентификатор процесса клиента openvpn в сценарии bash

В сценарии 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 в моем скрипте? Что мне нужно изменить, чтобы получить правильный PID в моей переменной и, в конечном итоге, в openvpn_pid_file?

Это все в Arch Linux.

Из 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 пусто.

Что касается решения, оно находится в комментарии Свена.

Что касается