Systemd单元的ExecStartPre with script给出错误,如何指定脚本的路径?

Systemd单元的ExecStartPre with script给出错误,如何指定脚本的路径?

有一个脚本必须由 systemd 服务的ExecStartPre.将此脚本放入的正确路径是什么以及如何在单元中指定它?当前使用此类路径失败(由于单元文件错误,服务将无法启动):

  • 脚本文件
  • ./脚本.sh
  • /etc/systemd/system/script.sh
  • /usr/local/sbin/script.sh

这是我在状态中收到的错误:

进程:8679 ExecStartPre=/usr/local/sbin/script.sh(代码=已退出,状态=203/EXEC)

这是脚本:

#!/bin/bash
if [ ! -e /var/log/myservice ];
        then
                echo "myservice's log directory doesn't exist. creating it."
                mkdir /var/log/myservice
fi

答案1

由于您不需要更改脚本,因此建议在这个答案中适用:脚本应放入/usr/local/sbin.它还需要是可执行的。你ExecStartPre会是

ExecStartPre=/usr/local/sbin/script.sh

但是,您根本不需要脚本来创建目录:

ExecStartPre=mkdir -p /var/log/myservice

更好的是,使用LogsDirectory=,这将在必要时创建目录,并确保该目录在沙箱内可用(如果服务已沙箱化):

LogsDirectory=myservice

相关内容