运行 启动 macos 的批处理脚本 - launchd

Run batch script on startup macos - launchd

我正在尝试在 MacOS 上添加启动时执行的 LaunchDeamon。

我制作了一个可直接执行的.sh 脚本。它位于 /usr/local/libexec/scripts/startup/ 这是我的脚本:startup.sh

#!bin/bash

# Check if deamon is running

if [ "$(ps -ef | grep -v grep | grep clamd | wc -l)" -le 0 ]


then


 #Start deamon
 /opt/homebrew/Cellar/clamav/0.104.2/sbin/clamd
 echo "clamd started"

else
 echo "clamd already running"

fi

还在启动时为 运行 创建了一个 launchd 文件,如下所示。它位于 /Library/LaunchDaemons/ com.startup.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
        <dict>
                <key>EnvironmentVariables</key>
                <dict>
                        <key>PATH</key>
                        <string>/bin:/usr/bin:/usr/local/bin</string>
                </dict>
                <key>Label</key>
                <string>com.startup</string>
                <key>Program</key>
                <string>/usr/local/libexec/scripts/startup/startup.sh</string>
                <key>RunAtLoad</key>
                <true/>
                <key>KeepAlive</key>
                <true/>
                <key>StandardOutPath</key>
                <string>/tmp/startup-scripts.stdout</string>
                <key>StandardErrorPath</key>
                <string>/tmp/startup-scripts.stderr</string>
        </dict>
</plist>

现在我想将它添加到 launchctl 列表中。

sudo launchctl load -w /Library/LaunchDaemons/com.startup.plist

我用 sudo launchctl list | grep com.startup 查看列表,它确实存在:

-   78  com.startup

不幸的是,当重新启动计算机时,它没有 运行 运行脚本。stdin/out/err 文件中没有任何输出。

关于为什么 运行 启动时不可用有什么建议吗?

告诉我,如果我能提供更多信息

我可以通过将 #!/bin/sh 放在代码的第一行来获得它 运行。我在第 2 行有它..

我还删除了所有 StandardPath。它们显然仅适用于 LaunchAgents。

工具 LaunchControl 是 LaunchAgents/Deamons 的 GUI。在那里我能够得到正确的错误信息。它可以通过 brew

安装