Originalmente preguntado en Stack Overflow pero puede ser más adecuado para aquí. Dondequiera que se responda primero, me aseguraré de actualizar la pregunta homóloga con la misma respuesta.
Ya he comprobado esta pregunta similar .
OS MacOS 10.15.17 (Catalina)
Quiero crear un script que utilice iperf para lanzar un cliente que mida mi velocidad de conexión cada varios segundos durante un periodo prolongado. He creado un archivo daemon y lo he puesto en ~/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>
netspeed
#!/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
El netspeed
es ejecutable por cualquiera:
$ ls -l netspeed
-rwxr-xr-x@ 1 myself staff 379 Jan 11 21:36 netspeed
Cuando intento añadir el nuevo demonio, con launchctl load ~/Library/LaunchAgents/com.myself.iperfclient.plist
Este es el mensaje de error que aparece en la consola:
Sandbox: bash(50654) System Policy: deny(1) file-read-data /Users/myself/Documents/bin/iperf/netspeed
Si en el .plist
descriptor para el demonio añado <string>open</string>
como primer elemento de ProgramArguments
No hay ningún error. Sin embargo, no quiero ejecutar el script de esta manera porque lanza una nueva ventana de Terminal cada vez, lo cual es extremadamente molesto.
Mi pregunta
¿Cómo puedo permitir que mi proceso daemon se ejecute netspeed
?
P.D.
El código de estado de launchctl es 126 .
$ launchctl list | grep myself
- 126 com.myself.iperfclient