Я установил speedtest. net CLI и написал простой ZSH сценарий оболочки для запуска двоичного файла speedtest и создания выходных данных CSV.
Хотите запускать этот сценарий каждый [период времени] (первоначально каждый час) и собирать данные о скоростных испытаниях в файл журнала для последующего анализа. Прочитав о cron и launchctl на Ma c, я решил создать собственный агент launchctl plist для моего скрипта и настроить его на запуск скрипта [в назначенный период времени].
Скрипт успешно выполняется при запуске независимо от launchctl; однако, когда lauchctl запускает скрипт, он не ожидает завершения внешнего вызова двоичного файла speedtest и переходит прямо к последнему утверждению echo. Выходной файл имеет время и дату, успешно добавленные, но отсутствует вывод из двоичного файла speedtest.
Я пытался уснуть, подождать и al oop, чтобы проверить идентификатор PID (который, я считаю, находится в переменной $!), Но происходит то же самое. Поэтому очень нужна помощь, чтобы понять, что происходит и как это исправить.
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 Script
#!/bin/zsh
dtFormatted=$(date "+%F %T")
csvResults=$(speedtest --format=csv)
while ($!)
do
sleep 10
done
echo '"'$dtFormatted'"',$csvResults
К вашему сведению - я нашел этот сайт действительно полезным для понимания работы launchctl - https://www.launchd.info/ и пробной версии инструмента Launch Control, чтобы проверить, что то, что я сделал, работает https://www.soma-zone.com/LaunchControl/.