我已经安装了 speedtest.net CLI 并编写了一个简单的 ZSH shell 脚本来运行 speedtest 二进制文件并生成 CSV 输出。
希望每隔 [时间段](最初是每小时)运行一次此脚本,并将速度测试数据收集到日志文件中以供以后分析。在阅读了 Mac 上的 cron 与 launchctl 之后,我决定为我的脚本创建一个原生的 launchctl plist 代理,并将其设置为 [在指定时间段] 运行脚本。
该脚本在独立于launchctl运行时运行成功;但是,当 lauchctl 运行脚本时,它不会等待对 speedtest 二进制文件的外部调用完成,而是直接跳转到最终的 echo 语句。输出文件成功附加了时间和日期,但缺少 speedtest 二进制文件的输出。
我尝试过睡眠、等待和循环来检查 PID ID(我相信在 $! 变量中找到),但同样的事情发生了。所以真的需要一些帮助来了解正在发生的事情以及如何解决它。
PLIST LaunchAgent
<?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.dazzur.runspeedtest</string>
<key>StandardOutPath</key>
<string>/Users/dazzur/OneDrive/dazDocs/Development/work/speedtestresults/speedtestresults.csv</string>
<key>ProgramArguments</key>
<array>
<string>/Users/dazzur/OneDrive/dazDocs/Development/work/speedtestresults/runspeedtest.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ThrottleInterval</key>
<integer>60</integer>
<key>KeepAlive</key>
<true/>
<key>HardResourceLimits</key>
<dict>
<key>FileSize</key>
<integer>10485760</integer>
</dict>
<key>SoftResourceLimits</key>
<dict>
<key>FileSize</key>
<integer>5242880</integer>
</dict>
</dict>
</plist>
ZSH Shell 脚本
#!/bin/zsh
dtFormatted=$(date "+%F %T")
csvResults=$(speedtest --format=csv)
while ($!)
do
sleep 10
done
echo '"'$dtFormatted'"',$csvResults
仅供参考 - 我发现这个网站对了解 launchctl 的工作方式非常有帮助 - https://www.launchd.info/和启动控制工具的试用版,以检查我所做的工作是否正常https://www.soma-zone .com/LaunchControl/。