在网络“启动”时重新启动 systemd 服务

在网络“启动”时重新启动 systemd 服务

我的系统需要使用 vpn,我使用的 vpnexpressvpn基于 OpenVpn,但使用自己的systemd守护进程。所有连接/断开命令都必须通过提供的二进制文件。为了避免在每次重启或从睡眠状态唤醒后在终端中输入这些命令(并配置一些 iptable 规则),我放置了一个脚本来/etc/NetworkManager/dispatcher.d/捕获“up”事件。

虽然脚本可以运行,但我在使用时遇到了问题expressvpn connect。从睡眠状态唤醒后,它表现得好像调用了多个连接命令。一个简单的解决方案是重新启动其服务。

我可以从终端(作为用户和 sudo)发出systemctl restart expressvpn一个命令,没有任何问题,但如果我将重新启动命令添加到调度程序脚本,就会出现问题。expressvpn connect

这是脚本中有问题的部分(包括我的临时记录器行):

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 disconnectand命令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 仍然表现得好像调用了多个 connect 命令,这显然是由于tunX创建了两个接口,而实际上应该只有一个tun0。这与我在重置服务修复之前注意到的行为完全相同。

相关内容