我想在 Debian 机器上运行 OpenVPN 客户端。我可以看到服务正在运行:
# sudo service openvpn status
● openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
Active: active (exited) since Thu 2017-12-28 19:01:14 UTC; 1h 8min ago
Process: 19416 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 19416 (code=exited, status=0/SUCCESS)
我可以通过守护进程启动 OpenVPN,让它在后台运行
# sudo openvpn --config /etc/openvpn/client.conf --daemon
我可以通过它的日志记录以及检查我的 WAN IP 来确认它按预期运行。
但是,我可以停止 OpenVPN 服务...
# sudo service openvpn stop
# sudo service openvpn status
● openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Thu 2017-12-28 20:10:00 UTC; 37s ago
Process: 19416 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 19416 (code=exited, status=0/SUCCESS)
但是守护程序仍在后台运行,我仍然连接到 VPN,并且我仍然获得公共 VPN IP 地址。
那么服务和守护进程有什么区别呢?他们不是互相依赖吗?
我的目标是在计算机启动时让 OpenVPN 在后台运行,并使其无限期地继续运行。我只是要将服务设置为在启动时运行,但上述操作现在让我对如何实现这一点感到困惑......
更新:这是这个文件:/lib/systemd/system/openvpn.service
# This service is actually a systemd target,
# but we are using a service since targets cannot be reloaded.
[Unit]
Description=OpenVPN service
After=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
ExecReload=/bin/true
WorkingDirectory=/etc/openvpn
[Install]
WantedBy=multi-user.target
在这种情况下,“服务”是用于控制守护进程、启动、停止、重新加载等的接口。openvpn 服务只是 systemd 控制下的 openvpn 实例。
看起来您还没有为 client.conf 启用 openvpn 服务配置。Systemd 可以独立控制多个 openvpn 实例。它们分别命名为 openvpn@<config>.service 其中 <config> 是 .conf 文件的名称,例如
[email protected]
. 创建配置后,您需要将其作为服务启用这
/lib/systemd/system/[email protected]
是一个模板文件,它使用传递的参数来运行指定的实例。要控制特定实例,您可以正常发出 systemctl 命令
等等