我的 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]
。