我man systemd.generator在/etc/systemd/system-generators/目录中有一个生成器脚本(如 所述)。
生成器在启动时运行并成功生成一个单元文件到 dir /run/systemd/generator.late/(使用ARGV[3]参数)。生成器还添加了符号链接,/run/systemd/generator.late/multi-user.target.wants/因为我想在启动时启动服务(特别是在网络启动时)。
单元文件和符号链接生成成功。问题是该服务没有自动启动。
当我发出 command 时service myService status,它说 inactive 并且日志是空的,这让我相信它甚至没有尝试启动服务。如果我这样做service myService start,它就会启动(= 单元文件没问题)。
为了找到此问题的解决方案,我已将此生成的单元文件复制到/etc/systemd/system并手动添加符号链接/etc/systemd/system/multi-user.target.wants并重新启动机器。服务 DID 在启动时启动。
这一切让我觉得从/run/systemd/generator.late/multi-user.target.wants/我的单位的链接不足以启动生成的服务。我检查了 system in 生成的其他单元文件/run/systemd/generator.late/,它们似乎做完全相同的事情,并且像我一样使用符号链接。那么这里发生了什么?
有没有办法解决这个问题?我创建的符号链接是错误的吗?我需要做的不仅仅是符号链接吗?
最终的生成器脚本如下所示:
#!/bin/bash 服务名称=我的服务 bin=/path/to/my/executable 生成器目录=$3 unitFile=$generatorDir/$serviceName.service cat > "$unitFile" <<EOF [单元] 描述=$serviceName 服务 之后=网络.目标 [服务] 类型=简单 ExecStart=$bin [安装] WantedBy=multi-user.target EOF mkdir "$generatorDir/multi-user.target.wants" 2>/dev/null ln -s "$unitFile" "$generatorDir/multi-user.target.wants/$serviceName.service"
注意:真正的脚本稍微复杂一点,这只是一个简单的例子。
我正在使用 Ubuntu 16.10。如果需要,我会提供其他信息。
小智 2
解决此问题的方法是启动系统,当您的服务未按预期启动时,您可以运行以下命令:
systemd 分析转储
这会输出有关每个单元的非常详细的信息列表,包括依赖项。由此您通常可以找出为什么您的设备没有进入活动状态。
| 归档时间: |
|
| 查看次数: |
6414 次 |
| 最近记录: |