大家好,感谢您阅读本文。我有下面的launchd 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>Label</key>
<string>com.me.sendip</string>
<key>Program</key>
<string>/Users/me/Documents/sendip.sh</string>
<key>StartInterval</key>
<integer>60</integer>
<key>StandardErrorPath</key>
<string>/Users/me/Desktop/sendiperr.log</string>
<key>StandardOutPath</key>
<string>/Users/me/Desktop/sendip.log</string>
</dict>
我也有以下脚本
/Users/me/Documents/Scripts/ip.sh | mail -s "Laptop ip" me@gmail.com
我尝试使用所有工具here进行问题排查。该脚本在启动时使用空日志文件触发,但之后没有任何内容。
有人请帮忙。我完全难过,我确信它是愚蠢的。非常感谢。
答案 0 :(得分:1)
嗯。我使用10.9.5中的以下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>Disabled</key>
<false/>
<key>Label</key>
<string>org.myorg.mytask</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/php</string>
<string>/path/to/myscript.php</string>
</array>
<key>QueueDirectories</key>
<array/>
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>5</integer>
</dict>
<key>WatchPaths</key>
<array/>
</dict>
</plist>
在每小时过去5分钟,每小时一次。
我认为你想要每分钟跑一次,对吧?所以你的版本将是:
<?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>Disabled</key>
<false/>
<key>Label</key>
<string>com.me.sendip</string>
<key>ProgramArguments</key>
<array>
<string>/Users/me/Documents/sendip.sh</string>
</array>
<key>QueueDirectories</key>
<array/>
<key>StartInterval</key>
<integer>60</integer>
<key>WatchPaths</key>
<array/>
</dict>
</plist>
您可能需要通过在终端中运行此命令来启动该服务:(它将需要您的密码)
sudo launchctl load com.me.sendip
编辑:这是一个具有更明确日志记录的脚本:
#!/bin/bash
OUTFILE='/Library/Logs/com.whatever.sendip.log'
ERRFILE='/Library/Logs/com.whatever.sendip.err.log'
SCRIPT='/Users/me/Documents/Scripts/ip.sh'
TARGET_EMAIL='me@gmail.com'
TARGET_SUBJECT='Laptop ip'
VERBOSE=1
if [ "$VERBOSE" -ne 0 ]; then
date >>"$OUTFILE"
date >>"$ERRFILE"
echo -n 'Current user: ' >>"$OUTFILE"
whoami >>"$OUTFILE"
fi
INFO=$("$SCRIPT" 2>>"$ERRFILE")
echo "$INFO" | mail -s "$TARGET_SUBJECT" "$TARGET_EMAIL" >>"$OUTFILE" 2>>"$ERRFILE"
ERROR_CODE="$?"
if [ "$ERROR_CODE" -ne 0 ]; then
echo "Result: Error Code $ERROR_CODE" >>"$OUTFILE"
echo "Info: $INFO" >>"$OUTFILE"
elif [ "$VERBOSE" -ne 0 ]; then
echo "Result: Success" >>"$OUTFILE"
echo "Info: $INFO" >>"$OUTFILE"
fi
答案 1 :(得分:1)
事实证明,launchd放弃了我试图运行的脚本的子进程。事实证明这是一个常见的问题。 Found the answer here.