launchd 在我这边
At my end with 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。该脚本在启动时会触发一个空日志文件,但之后什么也没有。
有人请帮助。我完全被难住了,我确信这很愚蠢。非常感谢。
嗯。我 运行 在 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
结果是 launchd 放弃了我试图 运行 的脚本的子进程。事实证明,这是一个常见问题。 Found the answer here.
大家好,感谢阅读本文。我有以下启动的 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。该脚本在启动时会触发一个空日志文件,但之后什么也没有。
有人请帮助。我完全被难住了,我确信这很愚蠢。非常感谢。
嗯。我 运行 在 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
结果是 launchd 放弃了我试图 运行 的脚本的子进程。事实证明,这是一个常见问题。 Found the answer here.