Я хотел бы записать сценарий, который звонит openvpn
во-первых, сопровождаемый ssh
. При вводе команды
sudo openvpn ~/my_connection.ovpn
в командной строке я получаю следующий вывод:
...
Wed Jan 4 21:04:35 2017 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Wed Jan 4 21:04:35 2017 /sbin/ip link set dev tun0 up mtu 1500
Wed Jan 4 21:04:35 2017 /sbin/ip addr add dev tun0 local IP_FOO peer IP_FOO
Wed Jan 4 21:04:35 2017 Initialization Sequence Completed
Эта команда блокируется, и оболочка не выпущена. Для запуска соединения SSH впоследствии, я должен отодвинуть процесс openvpn на задний план путем ввода Ctrl+Z, сопровождаемого a bg
.
Однако я хотел бы назвать openvpn шаг соединения и ssh автоматически путем вызова просто моего файла удара. Как мне удается эмулировать Ctrl+Z и bg
шаги в этом файле?
Я попытался добавить a &
к openvpn
команда и поместить nohup
перед ним. Никакой работы.
TL; DR: использовать sudo -b
или, лучше, openvpn [...] --daemon
.
Так как Вы работаете openvpn
(и, меньше а именно, так как Вы хотите запустить программу как корень в фоновом режиме), обычно распределенная информация о том, как к командам выполнения в фоновом режиме не обращается к Вашей ситуации. Вы сказали:
Я попытался добавить a и к команде cpenvpn и поместить nohop перед ним. Оба не работают.
Ваша команда:
sudo openvpn ~/my_connection.ovpn
Под sudo
конфигурация по умолчанию, если Вы недавно не ввели свой пароль для sudo
в том же контексте (для интерактивного использования, обычно это означает тот же терминал) затем это попросит Ваш пароль. Но если Вы выполняете команду в фоновом режиме путем добавления &
затем Вас не покажут [sudo] password for user:
строка или, учитывая возможность ввести его.
Таким образом в этой ситуации, выполняя команду, вводя Ваш пароль, и отправляя его в фон впоследствии разумный способ сделать это, для интерактивного использования.
Но это не единственный путь и, как Вы говорите, Вы не захотите делать это в сценарии.
sudo
имеет новую метку времени.Можно гарантировать это sudo
имеет текущую метку времени, когда она используется для выполнения команды первым выполнением:
sudo -v
Затем после этого можно работать:
sudo openvpn ~/my_connection.ovpn &
Однако обычно лучше избежать &
(и nohup
) в целом, когда Вы хотите выполнить команду в фоновом режиме с sudo
. Это в особенности имеет место для сценариев.
sudo -b
. В целом это обычно, что Вы хотите.Вместо этого можно работать sudo
самостоятельно на переднем плане, но передаче -b
флаг так sudo
заставляет команду быть выполненной в фоновом режиме.
sudo -b openvpn ~/my_connection.ovpn
Это обычно - лучший путь, особенно при помещении команды в сценарий. С sudo -b
Вы не получаете управление заданиями, но в сценарии оболочки управление заданиями отключено по умолчанию, и Вы не должны обычно использовать его.
Как man sudo
объясняет:
-b, --background
Run the given command in the background. Note that it is not
possible to use shell job control to manipulate background
processes started by sudo. Most interactive commands will
fail to work properly in background mode.
Это работает, потому что ничто не работает в фоновом режиме, пока sudo не получил Ваш пароль (при необходимости) и решил, что Вам разрешают выполнить команду.
openvpn
, необходимо, вероятно, просто выполнить его с --daemon
.openvpn
будет работать в фоновом режиме автоматически, если Вы выполните его с --daemon
опция:
sudo openvpn ~/my_connection.ovpn --daemon
Передача --daemon
после Вашего .opvn
имя файла, а не прежде; аргумент после --daemon
, если таковые имеются, интерпретируется как имя что daemonized openvpn
процесс должен использовать. (Также не добавляйте &
.)
Является ли это соответствующим, зависит от того, должно ли любое взаимодействие произойти после openvpn
был выполнен, но перед ним daemonizes. И это зависит, частично, на том, что настраивается в ~/my_connection.ovpn
. Но если openvpn
не мог сразу daemonize, затем все другие способы непосредственного выполнения, оно в фоновом режиме повредится, также.
Поэтому в любой ситуации, где Вы знаете, Вы хотите openvpn
чтобы начать работать в фоновом режиме, и Вы знаете, что не захотите возвращать его в передний план, необходимо сильно рассмотреть метод вызова его с --daemon
опция. Это характерно для openvpn
- большинство программ не поддерживает a --daemon
опция, хотя много программ сервера действительно имеют некоторую такую опцию. (Имя и синтаксис варьируются, как бы то ни было.)
Чтобы решить, использовать ли эту опцию (и как Вы хотите использовать ее), я рекомендую читать openvpn
страница руководства, особенно в разделе по --daemon
. Это имеет большую полезную информацию, и я только заключаю первый абзац в кавычки здесь:
--daemon [progname]
Become a daemon after all initialization functions are
completed. This option will cause all message and error output
to be sent to the syslog file (such as /var/log/messages),
except for the output of scripts and ifconfig commands, which
will go to /dev/null unless otherwise redirected. The syslog
redirection occurs immediately at the point that --daemon is
parsed on the command line even though the daemonization point
occurs later. If one of the --log options is present, it will
supercede syslog redirection.
The optional progname parameter [...]
Если у Вас есть сценарий, который выполняет несколько действий как корень, он не имеет никакой значительной активности, которая была бы обоснованно выполнена не как корень, и никогда нет ничего полезного для прибытия из запущения скрипта как некорневой пользователь, то пользователь сценария должен, вероятно, просто выполнить его как корень.
Если это верно, затем необходимо удалить sudo
от команд в сценарии. Когда выполнения сценария как корень, нет никакой потребности в sudo
. (Хотя пользователь root может, по умолчанию, выполнить любую команду как любой пользователь включая себя с sudo
и не нуждается в пароле, чтобы сделать так. Таким образом, если Вы действительно оставляете экземпляры sudo
в сценарии затем это будет, вероятно, все еще работать.)
Если у Вас есть какие-либо экземпляры sudo
в сценарии, которые на самом деле привыкли к командам выполнения как некоторый другой пользователь, чем корень (с -u user
), затем необходимо все еще сохранить те экземпляры.
Если целый скрипт запускается как корень, то большинство типичных способов сделать команды выполненными в фоновом режиме применяется, включая добавление &
и, при необходимости, использование nohup
(который Вы уже знаете о). Для этого, тем не менее, необходимо все еще сильно рассмотреть использование openvpn
с --daemon
опция.
TL; DR Запустить его в режиме демона: openvpn --config Windscribe-Japan.ovpn --daemon
Передача имени файла конфигурации (.ovpn) команде openvpn
работает, только если не указаны другие параметры. Если я укажу опцию --daemon
, то openvpn пытается проанализировать имя файла как параметр options и выдает ошибку Options: я пытаюсь проанализировать «Windscribe.ovpn» как параметр --option, но я не вижу ведущий '-' .
Ответ:
Чтобы избежать этого, необходимо указать имя файла с опцией --config
. Например, openvpn --config Windscribe.ovpn --daemon
. Затем добавьте системный журнал в tail -f /var/log/syslog
для дальнейшей проверки.
Вы также можете проверить до и после вывода этой команды curl curl ifconfig.co
, чтобы убедиться, что VPN подключен.
Примечание. Демон будет работать даже после выхода из сеанса SSH.
Вы можете просто скопировать свой файл
.conf в / etc / openvpn /
blockquote>Затем попросить 'service openvpn @ confName start' обработать все демонизаторы и sudo для вас.
.