我是 systemd 新手。我正在尝试设置 systemd,以便它将有效地启动无人值守的信息亭应用程序:
- 仅在 Postgresql 加载后启动,
- 在我的单个指定用户登录后开始,
- 如果被杀死,将自动重新启动。
此外,此设置应立即启动,无需提示或用户登录或需要其他交互,但这超出了当前问题的范围,我相信我已经完成了该部分的工作。
我正在 Debian 9 qemu/kvm guest 上开发其中的 systemd 部分,在 Debian 9 主机上运行。我有一位来宾,systemd 配置在其上按预期工作。为了确保我正确记录了所有要求,我创建了另一个相同的来宾,并逐步安装了所需的工具等。
在第二个来宾上,如果直接启动,我的应用程序可以正确运行,但 systemd 对此不满意。每台计算机上的 .service 和 .target 文件都是相同的(工作文件复制到新计算机),位于相同的位置,并且具有相同的权限。
我从中得到了一些指导这篇博文
我的/etc/systemd/system/MyApp.target
看起来像这样:
[Unit]
Description=MyApp Target
Requires=multi-user.target
After=multi-user.target
AllowIsolate=yes
我的/etc/systemd/system/MyApp.target.wants/MyApp.service
文件如下所示:
[Unit]
Description=MyApp
Requires=postgresql.service
After=postgresql.service
[Service]
Type=simple
Restart=always
RestartSec=20
User=myuser
WorkingDirectory=/home/myuser/MyApp
ExecStart=/home/myuser/MyApp/MyApp.exe
#StandardOutput=journal+console
StandardOutput=console
#CapabilityBoundingSet=
[Install]
WantedBy=MyApp.target
这些是我运行 systemctl 命令时收到的错误消息:
~$sudo systemctl enable MyApp
无法启用单元:File MyApp.service:没有这样的文件或目录
~$sudo systemctl status MyApp
无法找到单元 MyApp.service。
~$sudo systemd-analyze verify MyApp
dev-disk-by\x2duuid-d732e7b2\x2ddb0a\x2d42a3\x2d8f66\x2db392c05f9cbb.swap:单元绑定到非活动单元 dev-disk-by\x2duuid-d732e7b2\x2ddb0a\x2d42a3\x2d8f66\x2db392c 05f9cbb.设备。也停下来。无法准备文件名 MyApp:参数无效*
在设置过程中,我创建了一个在主机和来宾之间共享的目录,以便我可以将所需的文件复制到来宾。我知道 systemd 存在或已经存在明显卸载文件系统的问题,并且我的问题可能与此相关(https://github.com/systemd/systemd/issues/9869等),所以我查看了 /etc/fstab。
非工作虚拟机中的 fstab 确实有一个工作副本没有的附加条目,并且该条目与 systemd-analyze 错误消息中的 UUID 相匹配。我已尝试注释掉该条目。这并没有阻止其他任何东西按预期工作,但 systemd 行为没有改变。当我做出任何我认为可能会影响任何事情的更改时,我总是执行“systemctl daemon-reload”、重新启动等操作。我还没有尝试从失败的来宾中完全删除共享文件系统 - 它在工作的来宾上存在并正常运行。
非工作虚拟机上的 fstab 如下所示:
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/vda1 during installation
UUID=cbb7f406-f4d6-4617-af14-33465513a57b / ext4 errors=remount-ro 0 1
# swap was on /dev/vda5 during installation
UUID=d732e7b2-db0a-42a3-8f66-b392c05f9cbb none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
我不知道 systemd 到底对什么不满意,我还应该寻找什么,或者我需要改变什么。此配置在一台机器上确实可以完美运行,但在另一台机器上则不然,因为另一台机器在其他方面明显相同并且使用相同的 systemd 文件。
既然显然有某物两个系统之间存在差异,也许有人可以建议一种与虚拟机“比较”的方法来帮助追踪这一点?