运行 启动 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
安装
我正在尝试在 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
安装