如何避免在我的 launchd plist 中使用 bash 脚本?
How can I avoid using a bash script in my launchd plist?
这是我启动的 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>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.localhost.hexo</string>
<key>ProgramArguments</key>
<array>
<string>/Users/frankg/dev/bin/start-hexo.sh</string>
</array>
<key>UserName</key>
<string>frankg</string>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/frankg/hexo</string>
<key>StandardOutPath</key>
<string>/Users/frankg/hexo</string>
</dict>
</plist>
这是我的bash脚本
hexo server --cwd /Users/frankg/dev/code/apps/blog >> /tmp/MyLaunchdTest.out
这是有效的。如何避免使用 bash 脚本。
指定 hexo
可执行文件的完整路径,后跟每个参数作为 ProgramArguments
数组中的单独字符串。我对各种输出重定向感到有点困惑——在当前的 .plist 中,您指定输出到 /Users/frankg/hexo,但在脚本中,您将其重定向到 /tmp/MyLaunchdTest.out;我假设后者是你真正想要的? AIUI 你也可以使用 WorkingDirectory
键来替换 --cwd
选项。像这样:
<?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>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.localhost.hexo</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/hexo</string>
<string>server</string>
</array>
<key>UserName</key>
<string>frankg</string>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/frankg/hexo</string>
<key>StandardOutPath</key>
<string>/tmp/MyLaunchdTest.out</string>
<key>WorkingDirectory</key>
<string>/Users/frankg/dev/code/apps/blog</string>
</dict>
</plist>
这是我启动的 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>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.localhost.hexo</string>
<key>ProgramArguments</key>
<array>
<string>/Users/frankg/dev/bin/start-hexo.sh</string>
</array>
<key>UserName</key>
<string>frankg</string>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/frankg/hexo</string>
<key>StandardOutPath</key>
<string>/Users/frankg/hexo</string>
</dict>
</plist>
这是我的bash脚本
hexo server --cwd /Users/frankg/dev/code/apps/blog >> /tmp/MyLaunchdTest.out
这是有效的。如何避免使用 bash 脚本。
指定 hexo
可执行文件的完整路径,后跟每个参数作为 ProgramArguments
数组中的单独字符串。我对各种输出重定向感到有点困惑——在当前的 .plist 中,您指定输出到 /Users/frankg/hexo,但在脚本中,您将其重定向到 /tmp/MyLaunchdTest.out;我假设后者是你真正想要的? AIUI 你也可以使用 WorkingDirectory
键来替换 --cwd
选项。像这样:
<?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>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.localhost.hexo</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/hexo</string>
<string>server</string>
</array>
<key>UserName</key>
<string>frankg</string>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/frankg/hexo</string>
<key>StandardOutPath</key>
<string>/tmp/MyLaunchdTest.out</string>
<key>WorkingDirectory</key>
<string>/Users/frankg/dev/code/apps/blog</string>
</dict>
</plist>