默认情况下,systemd openvpn 客户端单元文件假定所有配置文件都以.conf
.我的许多配置文件以.ovpn
.在我的环境中,更改文件扩展名是不可取的。
默认的 openvpn 客户端单元文件是/usr/lib/systemd/system/[email protected]
[Unit]
Description=OpenVPN tunnel for %I
After=syslog.target network-online.target
Wants=network-online.target
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO
[Service]
Type=notify
PrivateTmp=true
WorkingDirectory=/etc/openvpn/client
ExecStart=/usr/bin/openvpn --suppress-timestamps --nobind --config %i.conf
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
ProtectSystem=true
ProtectHome=true
KillMode=process
[Install]
WantedBy=multi-user.target
我是否有理由不应该ExecStart
像这样编辑该文件并通过删除 .conf 扩展名来更改行?
ExecStart=/usr/bin/openvpn --suppress-timestamps --nobind --config %i
在这种情况下,我会将带有扩展名的完整配置文件名传递给 systemctl。就 systemd 而言,包含扩展会破坏任何内容吗?是否还有其他原因导致无法使用文件扩展名?
线路相关问题ExecStart
:
通常,我的 openvpn 命令行包含--daemon
.通过 systemd 启动时不需要吗?我发现上面没有包含它。如果我希望它作为守护进程运行,我需要包含它吗?
另外,为什么要--suppress-timestamps
包含在内?目前,我在日志/日志中没有得到重复的时间戳。如果我通过 systemd 启动,情况会改变吗?
以下是我建议的(未经测试的)单元文件:
[Unit]
Description=OpenVPN tunnel for %i
After=syslog.target network-online.target
StartLimitIntervalSec=0
Wants=network-online.target
[Service]
Type=notify
PrivateTmp=true
WorkingDirectory=/etc/openvpn/client
ExecStart=/usr/bin/openvpn --suppress-timestamps --nobind --daemon --config %i
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
ProtectSystem=true
ProtectHome=true
KillMode=process
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
答案1
它应该在没有扩展名的情况下工作,它只是单元文件建立的约定。systemctl
不抱怨单位名称中的点。
systemd 单元通常不会对它们启动的命令进行守护进程,这使得 systemd 更容易跟踪正在运行的进程。
--suppress-timestamps
可能是因为journald
无论如何都会增加时间。两者都尝试一下,看看有什么区别。