systemd 服务没有执行脚本?

systemd 服务没有执行脚本?

我的 systemd 服务如下。

/etc/systemd/system/caportal.service

[Unit]
Description=@CPACK_PACKAGE_DESCRIPTION_SUMMARY@

Before=network-pre.target
Wants=network-pre.target

DefaultDependencies=no
Requires=local-fs.target
After=local-fs.target

[Service]
Type=oneshot

ExecStart=/home/pi/test2.sh

RemainAfterExit=yes

[Install]
WantedBy=network.target

/home/pi/test2.sh

#!/bin/sh

echo Hi this working........ > output

它由 执行sudo chmod 777 /home/pi/test2.sh。我已使用 启动了 systemd 服务sudo systemctl start caportal。它成功运行。

输出sudo systemctl status caportal

● caportal.service - @CPACK_PACKAGE_DESCRIPTION_SUMMARY@
   Loaded: loaded (/etc/systemd/system/caportal.service; enabled)
   Active: active (exited) since Wed 2019-04-10 07:01:15 UTC; 1h 3min ago
  Process: 286 ExecStart=/home/pi/test2.sh (code=exited, status=0/SUCCESS)
 Main PID: 286 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/caportal.service

Apr 10 07:01:15 raspberrypi systemd[1]: Started @CPACK_PACKAGE_DESCRIPTION_SUMMARY@.

它显示服务运行良好,但文件中output没有写入“Hi,这正在运行......”。

但是当我们test2.sh使用命令“sudo /home/pi/test2.sh”运行时,它运行正常。

为什么与 systemd 服务一起使用时脚本不起作用?

答案1

您的脚本正在写入相对路径称为output。一个相对路径不以/;开头绝对路径开始于/

该路径相对于当前工作目录。由于您没有定义WorkingDirectory=并且您正在将服务作为系统服务运行,它默认为根目录/。您应该能够在/output(当前工作目录/加上相对路径output)找到该文件。

如果你希望文件写入特定路径,则应该指定绝对路径在您的脚本中或WorkingDirectory=[Service]

相关内容