如何分离 systemd 和服务中的 UNIT

如何分离 systemd 和服务中的 UNIT

我想注册 3 个设备(它们是 USB CAN)和 1 个 USB,以便在 Linux(Ubuntu)中使用 systemd 和服务打开设备时立即自动运行。

我正在使用 Nvidia 的 Jetson nano 开发板和 Ubuntu 18.04 版本。

这是我所做的。

首先,将此脚本添加到 rules.d/99-systemd.rules 末尾

# Socket CAN interface
KERNEL=="ttyACM0", SYMLINK="ttyACM0", TAG+="systemd"
KERNEL=="ttyACM1", SYMLINK="ttyACM1", TAG+="systemd"
KERNEL=="ttyACM2", SYMLINK="ttyACM2", TAG+="systemd"

# DTG interface
KERNEL=="ttyUSB0", SYMLINK="ttyUSB0", TAG+="systemd"

像这样 99-systemd.rules

其次,我制作了如下的服务文件。

[Unit]
Description= xx Router Running script

BindsTo=dev-ttyACM0.device
BindsTo=dev-ttyACM1.device
BindsTo=dev-ttyACM2.device
BindsTo=dev-ttyUSB0.device

After=dev-ttyACM0.device
After=dev-ttyACM1.device
After=dev-ttyACM2.device
After=dev-ttyUSB0.device

[Service]
ExecStart=/home/sgr-100-nano/xx.sh

[Install]
WantedBy=multi-user.target

如果我将所有设备连接到 Jetson 开发板,它就能正常运行。(我不仅可以通过运行 .sh 文件来检查,还可以使用 ifconfig 来检查)

但如果有任何未连接,那么服务就会被终止。

于是我在 Google 上搜索如何解决这个问题。我发现在服务文件的 UNIT 部分使用“Wants”代替“Bindsto”可以解决这个问题。然后它将单独操作。

但它不起作用。服务文件无法设置设备。我在 ifconfig 中看不到任何设备(例如 can0、can1、can2)。

我知道如果我将每个单独的 UNIT 服务分开,就可以解决这个问题。

但我只想使用一个.service 文件。

答案1

我发现,在 .service 文件中,使用“Wants”代替“BindsTo”即可,如我上面所写。这样就成功了!

但打开设备(Jetson Nano)后需要几分钟。

相关内容