【问题标题】:Cannot disable systemd serial-getty service无法禁用 systemd serial-getty 服务
【发布时间】:2014-03-03 00:19:26
【问题描述】:

在带有 Arch Linux 的 Raspberry Pi 上,有一个名为 serial-getty@AMA0 的服务处于活动状态。

单元文件为:/usr/lib/systemd/system/serial-getty@.service

作为 root 我可以调用

systemctl stop serial-getty@ttyAMA0
systemctl disable serial-getty@ttyAMA0

但重启后服务会重新启用并再次运行。

为什么服务禁用后又启用了?如何永久禁用它?

更新

systemd 在 /usr/lib/systemd/system-generators/ 使用 generators 是一个名为 systemd-getty-generator 的二进制文件。此二进制文件在系统启动时运行,并将符号链接 serial-getty@ttyAMA0.service 添加到/run/systemd/generator/getty.target.wants

我最终找到了一个肮脏的解决方案。我注释掉了 /usr/lib/systemd/system/serial-getty@.service 中的所有操作。该服务似乎确实启动了,但没有阻止 ttyAMA0。

【问题讨论】:

  • 查看/usr/lib/systemd/system/serial-getty@.service 的符号链接的放置位置。

标签: raspberry-pi archlinux tty gpio systemd


【解决方案1】:

停止再次启用服务的正确方法是使用:

systemctl mask serial-getty@ttyAMA0.service

(在本例中使用 ttyAMA0 作为示例)。这将为该服务的条目添加一个指向 null 的链接。

【讨论】:

【解决方案2】:

试试这个代码:

system("systemctl stop serial-getty@ttyAMA0.service");
system("systemctl disable serial-getty@ttyAMA0.service");

我用过,效果很好。

【讨论】:

  • 上下文是什么?来自 Bash 脚本? Python 脚本? Perl 脚本?一个C程序?还有什么?
  • 是的,你可以使用 system();在 linux 中的 c++ 中。例如,您可以在 c++ 中使用 system("data") ,system("dir") ,system("ls") 。它运行 bash 脚本(linux 中的系统脚本)
  • 我很长时间以来第一次登录以发表此评论。请不要使用 C 的 system 函数。它有众所周知的安全问题。在这种情况下尤其糟糕,因为操作 systemd 通常需要 root 权限。编辑:我会为上下文添加这个wiki.sei.cmu.edu/confluence/pages/…
猜你喜欢
  • 2015-08-23
  • 1970-01-01
  • 2015-11-17
  • 2019-07-13
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多