我正在尝试在带有systemd的raspi (运行raspbian 10 - buster)上准备好蓝牙时启动一个任务。我已经添加了包含以下内容的文件/lib/systemd/system/my.service
[Unit]
After=bluetooth.target
[Service]
Type=idle
ExecStart=/root/my.sh
[Install]
Wants=bluetooth.target
当我使用systemd-analyse plot
创建的图表查看启动时发生的情况时,我发现我的服务在bluetooth.target单元激活之前就启动了。但当我向systemctl show my.service
查询时,它说
...
After=basic.target bluetooth.target system.slice systemd-journald.socket sysinit.target
...
有人能解释一下为什么我的服务在bluetooth.target之后没有启动吗?谢谢
编辑我听从了@ukBaz的建议,将我的服务文件移到了/etc/systemd/system,并将wants节移到了Unit部分(实际上我把它改成了'Requires')。所以我的文件现在包含
[Unit]
After=bluetooth.target
Requires=bluetooth.target
[Service]
Type=idle
ExecStart=/root/my.sh
[Install]
WantedBy=multi-user.target
现在我的服务在bluetooth.target之后开始..。但是bluetooth.target很早就开始了!systemctl show bluetooth.target
告诉我'After=bluetooth.service‘,那么为什么它是在bluetooth.service之前启动/到达的呢?
发布于 2021-07-23 18:09:31
系统的单元文件副本通常保存在/lib/systemd/system
目录中。当软件在系统上安装单元文件时,这是默认放置它们的位置。
如果您希望修改设备的工作方式或创建自己的设备,最好的位置是在/etc/systemd/system
目录中。在此目录位置中找到的单元文件优先于文件系统上的任何其他位置。
Wants
应该在[Unit]
部分,而不是[Install]
部分。
[Install]
部分是可选的,用于定义设备启用或禁用时的行为。我只把WantedBy=multi-user.target
放在这一部分。multi-user.target
告诉systemd
(据我所知)它是“正常操作”所必需的。
https://stackoverflow.com/questions/68496506
复制相似问题