全部
Internet上有多个代码示例,这些示例说明了如何在纯C甚至C ++中编写旧样式的守护程序。
但是,“新样式”(或系统样式)没有这种东西。
是否可以使用基本的“简单守护程序”代码在C / C ++中编写“新样式” systemd守护程序?
TIA !!
答案 0 :(得分:0)
我的Snap! C++ environment中有很多示例。在*.service
目录下查找snapwebsites/debian
文件,找到充当守护程序的项目。
或多或少,您编写了一个工具来打开端口以侦听和处理收到的消息。其余的由systemd负责。
以下是snapfirewall守护程序使用的示例:
# Documentation available at:
# https://www.freedesktop.org/software/systemd/man/systemd.service.html
[Unit]
Description=Snap! Websites snapfirewall daemon
After=snapbase.service snapcommunicator.service snapdbproxy.service
Before=fail2ban.service
[Service]
Type=simple
WorkingDirectory=~
ProtectHome=true
# snapfirewall needs to run iplock which setuid to root so we can't set
# this parameter to true
NoNewPrivileges=false
ExecStart=/usr/sbin/snapfirewall
ExecStop=/usr/bin/snapstop --service "$MAINPID"
Restart=on-failure
RestartSec=1min
User=snapwebsites
Group=snapwebsites
LimitNPROC=1000
# For developers and administrators to get console output
#StandardOutput=tty
#StandardError=tty
#TTYPath=/dev/console
# Enter a size to get a core dump in case of a crash
#LimitCORE=10G
[Install]
WantedBy=multi-user.target
# vim: syntax=dosini
如顶部所述,service unit documentation位于freedesktop上。
在这个例子中,我有一个NoNewPrivileges=false
参数。这意味着suid
将按预期工作。否则,我的工具无法向防火墙添加/删除规则,因为snapfirewall以snapwebsites
用户身份运行,而根本无法运行iptables
。
这就是它的全部了。
注意::使用debian目录并构建自己的软件包的优点是,它将自动生成所有必要的脚本,以按预期方式启动/启用/停止服务。唯一的技巧是debian/rules
必须包含--with systemd
命令行选项。但除此之外,这将是一件轻而易举的事情。