我想在 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
答案1
在此上下文中,“服务”是用于控制守护进程、启动、停止、重新加载等的接口。openvpn 服务只是 systemd 控制下的 openvpn 的一个实例。
看起来您尚未为 client.conf 启用 openvpn 服务配置。Systemd 可以独立控制 openvpn 的多个实例。这些实例分别命名为 openvpn@<config>.service,其中 <config> 是 .conf 文件的名称,例如[email protected]
。创建配置后,您需要将其作为服务启用
systemctl enable [email protected]
Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /lib/systemd/system/[email protected].
这是一个使用传递的参数来运行指定实例的模板文件。/lib/systemd/system/[email protected]
要控制特定实例,您可以像平常一样发出 systemctl 命令
systemctl status openvpn@client
systemctl start openvpn@client
systemctl stop openvpn@client
ETC。