系统服务在脚本中省略命令

时间:2017-09-17 16:43:31

标签: linux raspberry-pi boot systemd systemctl

我正在尝试通过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)

1 个答案:

答案 0 :(得分:-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