调试 systemd 服务中缺失的功能

调试 systemd 服务中缺失的功能

当守护进程作为 systemd 服务启动时,我的 OpenVPN 服务器无法执行配置为 python 脚本--learn-address。当以 root 身份手动启动时,它可以正常工作。我发现,如果我在 中注释以下行,它也可以作为 systemd 服务运行:/etc/systemd/system/[email protected]

CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_READ_SEARCH CAP_AUDIT_WRITE

因此,我猜我的问题与缺少有关Capability。我该如何调试以找出缺少的内容?OpenVPN 日志只显示WARNING: Failed running command (--learn-address): external program exited with error status: 1。我在系统日志中也没有找到与此相关的任何内容。

learn-address 脚本用于根据连接者应用自定义防火墙规则。该脚本执行组成员身份查找(使用 /usr/bin/id 命令)并使用 iptable 命令(使用 sudo)添加规则/链。经过进一步调试,我认为尝试调用 iptables 时可能会失败。该命令以代码 3 退出。

它已经运行了一段时间了,我想知道系统更新后它是否不会停止工作。

答案1

这可能不是一个简单的解决方案,但它可以提供帮助:用启动命令替换启动strace命令,然后检查日志以找出哪个系统调用失败。然后,阅读该系统调用的文档,猜测缺少什么功能。

示例命令:strace -f -o /your/logfile your-command your-parameters

甚至可以尝试选择-e status=failed

相关内容