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

Перезапуск службы systemd при возникновении события в сети

Моя система требует использования vpn, который я использую expressvpn который основан на OpenVpn, но использует собственный systemd демон. Все команды подключения / отключения должны проходить через предоставленный двоичный файл. Чтобы не вводить эти команды в терминал после каждой перезагрузки или выхода из спящего режима (и для настройки нескольких правил iptable), я поместил скрипт в /etc/NetworkManager/dispatcher.d/ ловя «вверх» событие.

Пока скрипт работает, у меня проблемы с expressvpn connect. После пробуждения от сна он действует так, как если бы было вызвано несколько команд подключения. Простое решение - перезапустить его службу.

Я могу выпустить systemctl restart expressvpn за которым следует expressvpn connect команда из терминала (как пользователь, так и sudo) без проблем, но если я добавлю команду перезапуска в сценарий диспетчера, что-то сломается.

Это проблемная часть скрипта (включая мои строки временного журнала):

date "+%H:%M:%S %d/%m/%y" &> /home/twifty/Desktop/up-log.txt

echo "restarting..." >> /home/twifty/Desktop/up-log.txt

#systemctl stop expressvpn >> /home/twifty/Desktop/up-log.txt
#systemctl start expressvpn >> /home/twifty/Desktop/up-log.txt
systemctl restart expressvpn.service

echo "connecting..." >> /home/twifty/Desktop/up-log.txt

#/usr/bin/expressvpn status >> /home/twifty/Desktop/up-log.txt
/usr/bin/expressvpn disconnect >> /home/twifty/Desktop/up-log.txt
/usr/bin/expressvpn connect >> /home/twifty/Desktop/up-log.txt

echo "setup..." >> /home/twifty/Desktop/up-log.txt

В expressvpn disconnect и connect команда должна вывести успешное или неудачное завершение, но в файл ничего не записывается.

Статус услуги systemctl status expressvpn после запуска скрипт выглядит так:

● expressvpn.service - ExpressVPN Daemon
   Loaded: loaded (/usr/lib/systemd/system/expressvpn.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2017-08-21 11:53:20 CST; 16s ago
 Main PID: 5043 (expressvpnd)
    Tasks: 10 (limit: 4915)
   CGroup: /system.slice/expressvpn.service
           └─5043 /usr/sbin/expressvpnd --client-version 1.2.0 --client-build 167

Aug 21 11:53:20 twifty-lynx systemd[1]: Started ExpressVPN Daemon.
Aug 21 11:53:20 twifty-lynx expressvpnd[5043]: /sbin/resolvconf: illegal option -- -
Aug 21 11:53:20 twifty-lynx expressvpnd[5043]: /sbin/resolvconf: illegal option -- e
Aug 21 11:53:20 twifty-lynx expressvpnd[5043]: /sbin/resolvconf: illegal option -- n
Aug 21 11:53:20 twifty-lynx expressvpnd[5043]: event_dispather: invalid subscriber addr or protocol2017/08/21 11:53:20 method Authenticate 
Aug 21 11:53:20 twifty-lynx expressvpnd[5043]: 2017/08/21 11:53:20 method SetAuth has wrong number of ins: 2
Aug 21 11:53:20 twifty-lynx expressvpnd[5043]: openvpn-expressvpn: no process found

тогда как при запуске из терминала вывод будет содержать:

Aug 21 13:12:09 twifty-lynx sudo[4673]:     root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/sbin/dmidecode -s system-uuid
Aug 21 13:12:09 twifty-lynx sudo[4673]: pam_unix(sudo:session): session opened for user root by (uid=0)
Aug 21 13:12:09 twifty-lynx sudo[4673]: pam_unix(sudo:session): session closed for user root

без systemctl restart строка, сценарий работает правильно, или если я запускаю эту команду от себя sudo -u twifty systemctl restart, это тоже получится. Я считаю, что это ошибка в самом expressvpn (не поддерживающем одновременную работу нескольких пользователей).

Я не хочу жестко кодировать свое имя пользователя в сценарии, я также хочу поддерживать как удаленный, так и локальный доступ. Как я могу настроить это для поддержки нескольких пользователей?

Обновить:

Добавление к командам префикса sudo -u twifty не работает. При пробуждении от длительного сна expressvpn по-прежнему действует так, как будто было вызвано несколько команд подключения, о чем свидетельствует наличие двух tunX интерфейсы создаются, когда должен быть только один tun0. Это точно такое же поведение, которое я заметил до сброса исправления службы.