首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当蓝牙已准备好使用systemd时,无法启动任务

当蓝牙已准备好使用systemd时,无法启动任务
EN

Stack Overflow用户
提问于 2021-07-23 16:47:23
回答 1查看 69关注 0票数 0

我正在尝试在带有systemd的raspi (运行raspbian 10 - buster)上准备好蓝牙时启动一个任务。我已经添加了包含以下内容的文件/lib/systemd/system/my.service

代码语言:javascript
运行
复制
[Unit]
After=bluetooth.target

[Service]
Type=idle
ExecStart=/root/my.sh

[Install]
Wants=bluetooth.target

当我使用systemd-analyse plot创建的图表查看启动时发生的情况时,我发现我的服务在bluetooth.target单元激活之前就启动了。但当我向systemctl show my.service查询时,它说

代码语言:javascript
运行
复制
...
After=basic.target bluetooth.target system.slice systemd-journald.socket sysinit.target
...

有人能解释一下为什么我的服务在bluetooth.target之后没有启动吗?谢谢

编辑我听从了@ukBaz的建议,将我的服务文件移到了/etc/systemd/system,并将wants节移到了Unit部分(实际上我把它改成了'Requires')。所以我的文件现在包含

代码语言:javascript
运行
复制
[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之前启动/到达的呢?

EN

Stack Overflow用户

发布于 2021-07-23 18:09:31

系统的单元文件副本通常保存在/lib/systemd/system目录中。当软件在系统上安装单元文件时,这是默认放置它们的位置。

如果您希望修改设备的工作方式或创建自己的设备,最好的位置是在/etc/systemd/system目录中。在此目录位置中找到的单元文件优先于文件系统上的任何其他位置。

Wants应该在[Unit]部分,而不是[Install]部分。

[Install]部分是可选的,用于定义设备启用或禁用时的行为。我只把WantedBy=multi-user.target放在这一部分。multi-user.target告诉systemd (据我所知)它是“正常操作”所必需的。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68496506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档