背景
我正在编写一个要在 Raspberry Pi 2 上的 Raspbain 中运行的简单脚本,只需打开一个 LED 以指示我已准备好从台式计算机连接 SSH。
脚本在这里并不重要,只提一下,因为我使用频率控制,所以脚本运行无限循环,频繁地打开和关闭 LED。所以这是一个简单服务的例子。但是,至少这个问题的公认答案建议我将类型设置为空闲。所以我的服务文件看起来像
[Unit]
Description=Turn on LED after SSH is ready
[Service]
Type=idle
ExecStart=/usr/bin/sshready.py
[Install]
Wants=network-online.target
After=network-online.target
Run Code Online (Sandbox Code Playgroud)
影响
该服务按预期运行。但是,我注意到在 LED 亮起后立即在台式计算机中启动 Putty 时,登录提示不会立即出现。所以我检查了
$ systemd-analyze plot > output.svg
Run Code Online (Sandbox Code Playgroud)
结果显示
题
看起来我的服务没有在 之后启动network-online.target,这里有什么问题,我该如何解决?
Mar*_*erg 18
当有关于 systemd 指令的问题时,您可以使用man systemd.directives它来查找记录的位置。在这种情况下,它显示After=记录在man systemd.unit.
在该文件中,它显示该After=指令列在“[UNIT] SECTION OPTIONS”中,表明它属于[Unit]该文件的部分。
相同的文档还记录了 [INSTALL] 部分选项,After=但未在此处列出。
简而言之,您的After=指令位于单元文件的错误位置,因此在您将其移动到正确位置之前它不起作用。
Ear*_*ine 13
通过将服务修改为
[Unit]
Description=Turn on LED after SSH is ready
After=network-online.target
[Service]
Type=idle
ExecStart=/usr/bin/sshready.py
[Install]
WantedBy=network-online.target
Run Code Online (Sandbox Code Playgroud)
仍然没有完全理解我在做什么,但它现在有效。谁能解释一下?
更新
这个答案是我在接受的答案出现之前创建的。
| 归档时间: |
|
| 查看次数: |
30811 次 |
| 最近记录: |