-2

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

/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)

4

1 回答 1

-1

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
于 2017-09-17T17:02:37.980 回答