我正在尝试通过systemd启动名为pigpiod.service的服务。它使用三个命令调用脚本。第二个被省略。为什么是这样?

/etc/systemd/system/pigpiod.service:

[Unit]
Description=Starts pigpiod
Before=touchscreen.service

[Service]
ExecStart=/home/sysop/pigpiod.sh

[Install]
WantedBy=multi-user.target


/home/sysop/pigpiod.sh:

#!/bin/sh

touch /home/sysop/before_pigpiod
/usr/bin/pigpiod
touch /home/sysop/after_pigpiod



重新启动计算机时,这两个文件在/home/sysop/中创建,但是pigpiod没有启动。
通过sudo systemctl start pigpiod手动启动服务时,也会发生同样的情况。
手动运行sudo /home/sysop/pigpiod.sh时,pigpiod实际上正在启动!


这是引导后sudo systemctl status pigpiod -l的输出:

● pigpiod.service - Starts pigpiod
   Loaded: loaded (/etc/systemd/system/pigpiod.service; enabled)
   Active: inactive (dead) since Sat 2017-09-16 20:02:03 UTC; 2min 29s ago
  Process: 440 ExecStart=/home/sysop/pigpiod.sh (code=exited, status=0/SUCCESS)
 Main PID: 440 (code=exited, status=0/SUCCESS)

Sep 16 20:02:02 kivypie systemd[1]: Starting Starts pigpiod...
Sep 16 20:02:02 kivypie systemd[1]: Started Starts pigpiod.


为什么systemd跳过了/usr/bin/pigpiod的执行,却没有以root身份手动运行脚本的原因?

我的系统:Raspberry Pi Model 3B,Raspbian GNU / Linux 8(jessie)

最佳答案

pigpiod叉没有-g选项。因此,使用Type = forking或使用pigpiod -g

[Unit]
Description=Starts pigpiod
Before=touchscreen.service

[Service]
ExecStart=/home/sysop/pigpiod.sh
Type=forking

[Install]
WantedBy=multi-user.target

关于linux - Systemd服务在脚本中遗漏了命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46266464/

10-11 03:25