ОС MacOS 10.15.17 (Каталина)
Я хочу создать скрипт, который использует iperf для запуска клиента, измеряющего скорость моего соединения каждые несколько секунд в течение длительного периода времени. Я создал файл демона и поместил его в ~/Library/LaunchAgents/com.myself.iperfclient.plist
.
com.myself.iperfclient.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.myself.iperfclient</string>
<key>ProgramArguments</key>
<array>
<string>/Users/myself/Documents/bin/iperf/netspeed</string>
</array>
<key>StartInterval</key>
<integer>20</integer> <!-- in seconds -->
<key>Disabled</key>
<false/>
</dict>
</plist>
чистая скорость
#!/bin/bash
# see https://stackoverflow.com/a/246128/10200417
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
script_name=`basename $0`
# echo "called script $script_name from $script_dir"
iperf_server=127.0.0.1
iperf_port=54321
# launch iperf client, log results to ./logs/client.log
iperf \
-c $iperf_server \
-p $iperf_port \
--logfile $script_dir/logs/client.log
Файл netspeed
доступен для всех:
$ ls -l netspeed
-rwxr-xr-x@ 1 myself staff 379 Jan 11 21:36 netspeed
Когда я пытаюсь добавить новый демон с помощью launchctl load ~/Library/LaunchAgents/com.myself.iperfclient.plist
, это сообщение об ошибке, которое я получаю в консоли:
Sandbox: bash(50654) System Policy: deny(1) file-read-data /Users/myself/Documents/bin/iperf/netspeed
Если в дескрипторе .plist
для демона я добавлю <string>open</string>
в качестве первого элемента в ProgramArguments
, ошибки не будет. Однако я не хочу запускать скрипт таким образом, потому что он каждый раз запускает новое окно терминала, что крайне раздражает.
Мой вопрос
Как разрешить моему процессу-демону выполнять netspeed
?
P.S.
Код состояния launchctl: 126.
$ launchctl list | grep myself
- 126 com.myself.iperfclient