![Systemd 和 AmbientCapability:调试“无效参数”错误](https://linux22.com/image/9892/Systemd%20%E5%92%8C%20AmbientCapability%EF%BC%9A%E8%B0%83%E8%AF%95%E2%80%9C%E6%97%A0%E6%95%88%E5%8F%82%E6%95%B0%E2%80%9D%E9%94%99%E8%AF%AF.png)
我正在运行 Arch Linux。我的问题最初出现在 Caddy Web 服务器上,但不仅限于此。因此,我有一个简单的单元来使用随机二进制文件(capsh)进行故障排除:
[Service]
ExecStart=/sbin/capsh --print
AmbientCapabilities=CAP_NET_BIND_SERVICE
User=nobody
我已经运行了 strace -f -p 1 来跟踪 PID 1 及其子进程,因此我可以在启动设备后看到原始错误:
prctl(PR_CAP_AMBIENT, PR_CAP_AMBIENT_RAISE, CAP_NET_BIND_SERVICE, 0, 0) = -1 EINVAL (Invalid argument)
因此,我必须对 Caddy 二进制文件使用 sudo setcap cap_net_bind_service=+ep 并注释掉单元中的功能设置。我仍然使用 systemd 231,因为即使我已经设置了二进制文件,较新的版本也会出错。
我还有哪些进一步的调试选项?
答案1
原因是内核太旧了!我使用的是 OVH 服务器,它的内核为 3.14。我没有意识到系统更新不会更新内核。我遵循了这些http://help.ovh.com/KernelInstall以及其中一些说明https://bbs.archlinux.org/viewtopic.php?id=214512