AmbientCapabilities=CAP_NET_BIND_SERVICE
centos7.6 + 的内置systemctl版本是219,在github上面,此时此刻已经有243+的版本了。
根据现有脚本依葫芦画瓢,打算使用系统级的systemd作为守护进程。
初衷不打算使用root权限运行服务,根据相关网络资料,得知systemd有一个参数,可以使无root权限的用户如nobody,使用1024以下的网络端口,但参数AmbientCapabilities
对systemd有版本要求,≥230+,如下这么写,使用默认内置版本219运行后报 "status=218/Capabilities"错误,是因为版本太低不支持该参数。
此外cap_net_bind_service这个参数限制太多,只能应用在可执行文件本身和进程,不能是脚本什么的,脚本中指向的其他应用也不行,不支持suid,不支持LD_LIBRARY_PATH。
[Unit]
Description=abc
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/abc/123/test.py
AmbientCapabilities=CAP_NET_BIND_SERVICE
LimitNOFILE=infinity
User=test
Group=test
Restart=on-failure
[Install]
WantedBy=multi-user.target
我尝试升级systemd,但是发现源码编译安装困难重重(真的很困难),各种依赖和各种莫名其妙的问题,实在填不完的坑,最后只能暂时搁置,简单粗暴的直接root用户启动脚本,快乐完事。