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