我正在使用 vagrant 来模拟网络通信服务。我的基础盒子是 ubuntu/bionic64。我要移植到 VM 的应用程序是用 C++ 编写的,并绑定到 ipc 地址,如下所示:
sink.bind("ipc:///var/run/dummy-service");
因此,在 /usr/bin/ 中编译并安装此服务后,我使用systemctl
以下服务文件创建所需的服务:
[Unit]
Description=dummy manipulator
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/dummy-service.pid
ExecStart=/usr/bin/dummy-service
[Install]
WantedBy=multi-user.target
至于服务文件的位置:$HOME/.config/systemd/user/dummy.service
所以当我运行以下命令时:
systemctl --user enable dummy.service
systemctl --user start dummy.service
它在运行其状态时给出退出代码错误:
dummy.service - belt and electrodes status manipulator
Loaded: loaded (/home/vagrant/.config/systemd/user/dummy.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2021-01-28 23:52:58 UTC; 18s ago
Process: 22420 ExecStart=/usr/bin/dummy-service (code=exited, status=1/FAILURE)
Jan 28 23:52:58 ubuntu-bionic systemd[20920]: Starting dummy manipulator...
Jan 28 23:52:58 ubuntu-bionic systemd[20920]: dummy.service: Control process exited, code=exited status=1
Jan 28 23:52:58 ubuntu-bionic systemd[20920]: dummy.service: Failed with result 'exit-code'.
Jan 28 23:52:58 ubuntu-bionic systemd[20920]: Failed to start dummy manipulator.
后来我发现是权限错误,因为该服务不允许在/var/run/
.当我将绑定切换到 时sink.bind("ipc:///tmp/dummy-service");
,该服务显然运行没有问题:
dummy.service - dummy manipulator
Loaded: loaded (/home/vagrant/.config/systemd/user/dummy.service; enabled; vendor preset: enabled)
Active: activating (start) since Fri 2021-01-29 00:06:04 UTC; 30s ago
我应该怎么做才能运行绑定到该/var/run
地址的服务?
我已经尝试以超级用户身份安装二进制文件,我尝试使用chmod 777
.我尝试更改服务文件中的选项:
User=root
Group=root
一切都没有成功。