生成的 systemd 单元无法在启动时启动

生成的 systemd 单元无法在启动时启动

我在目录中有一个生成器脚本(如所述man systemd.generator) 。/etc/systemd/system-generators/

生成器在启动时运行,并成功生成一个单元文件到目录/run/systemd/generator.late/(使用ARGV[3]参数)。生成器还添加了符号链接,/run/systemd/generator.late/multi-user.target.wants/因为我想在启动时启动服务(特别是在网络启动时)。

单元文件和符号链接生成成功。问题是服务没有自动启动。

当我发出命令时service myService status,它说不活动,日志是空的,这让我相信它甚至没有尝试启动服务。如果我这样做service myService start,它就会启动(= 单元文件没有问题)。

为了尝试找到此问题的解决方案,我已将此生成的单元文件复制到/etc/systemd/system并手动添加符号链接/etc/systemd/system/multi-user.target.wants,然后重新启动机器。服务确实在启动时启动。

这一切都让我认为从/run/systemd/generator.late/multi-user.target.wants/我的单位到的链接不足以启动生成服务。我检查了系统生成的其他单元文件/run/systemd/generator.late/,它们似乎做了完全相同的事情,并且像我一样使用了符号链接。那么这里发生了什么?

有办法解决此问题吗?我创建的符号链接有误吗?除了符号链接,我还需要做其他事情吗?

最终的生成器脚本如下所示:

/bin/bash #!/bin/bash

服务名称=myService
bin=/路径/到/我的/可执行文件
发电机目录=$3
unitFile=$generatorDir/$serviceName.service

猫>“$ unitFile”<< EOF
[单元]
描述=$serviceName 服务
之后=网络.目标

[服务]
类型=简单
执行开始=$bin

[安装]
WantedBy=多用户.目标
末梢血

mkdir "$generatorDir/multi-user.target.wants" 2>/dev/null
ln -s“$unitFile”“$generatorDir/multi-user.target.wants/$serviceName.service”

注意:真正的脚本稍微复杂一些,这只是一个简单的例子。

我正在使用 Ubuntu 16.10。如果需要,我将提供更多信息。

答案1

解决此问题的方法是启动系统,当您的服务未按预期启动时,您可以运行以下命令:

systemd-analyze 转储

这将输出有关每个单元的非常详细的信息列表,包括依赖项。通过这些信息,您通常可以找出您的单元未进入活动状态的原因。

相关内容