我在目录中有一个生成器脚本(如所述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 转储
这将输出有关每个单元的非常详细的信息列表,包括依赖项。通过这些信息,您通常可以找出您的单元未进入活动状态的原因。