В сценарии 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
пусто.
Что касается решения, оно находится в комментарии Свена.
Что касается