Entonces, a veces, mi Mac pierde la conexión a Internet.
Cuando estoy frente a él físicamente, puedo usar la terminal y hacer lo siguiente para repararlo:
networksetup -setnetworkserviceenabled ethernet off
escriba mi contraseña entonces:
networksetup -setnetworkserviceenabled ethernet on
y escriba mi contraseña de nuevo.
El problema es que la máquina aloja varios servidores y necesito que se ejecuten incluso cuando no estoy físicamente presente. Así que quería ejecutar un script diario que hiciera esto cuando no estoy presente y asegurarme de que la conexión se restablezca al menos una vez al día. Pero como no he descubierto una forma de incluir mi contraseña en la línea de comandos, no puedo hacerlo.
Entonces mi pregunta es: ¿es posible hacer lo que describí?
Ok, gracias Batman por sugerir editar el archivo sudoer. En lugar de crontab o launchd para programarlo una vez al día (que de todos modos no fue lo suficientemente bueno), en su lugar escribí ese applescript para hacerlo más regularmente y hasta ahora parece estar funcionando:
repeat
repeat
try
do shell script "ping -t 15 8.8.8.8"
exit repeat
on error
display notification "Reconnection attempt"
do shell script "sudo networksetup -setnetworkserviceenabled ethernet off"
do shell script "sudo networksetup -setnetworkserviceenabled ethernet on"
delay 9
display notification "Connection should be established"
end try
end repeat
delay 5
end repeat
Estoy agregando más detalles: lo exporté como .app y luego edité el .plist con las líneas:
<key>LSBackgroundOnly</key>
<string>1</string>
Para hacerlo invisible cuando se ejecuta (sin icono de base) y finalmente lo hice ejecutar al iniciar sesión.
sudo le permite ejecutar un comando con un nivel de permiso elevado. Puede editar el archivo sudoers ejecutando
sudo visudo
Una forma de hacer esto es agregar primero una línea a su archivo sudoers que permita que los comandos enumerados se ejecuten sin contraseña. Al agregar el comando específico a su archivo sudoers, puede permitir que los comandos deseados se ejecuten sin contraseña. Puede hacerlo ingresando las siguientes 2 líneas en su archivo sudoers (el archivo que se abre cuando ejecuta "sudo visudo"):
usuario TODOS=(TODOS) NOPASSWD: /usr/sbin/networksetup -setnetworkserviceenabled ethernet encendido usuario TODOS=(TODOS) NOPASSWD: /usr/sbin/networksetup -setnetworkserviceenabled ethernet apagado
con "usuario" reemplazado por su nombre de usuario.
Luego, como su usuario, para ejecutar algo en un horario regular, puede usar crontab
crontab -e
y anexar las lineas:
0 1 * * * sudo networksetup -setnetworkserviceenabled ethernet off && sudo networksetup -setnetworkserviceenabled ethernet on
que aplicará este reinicio a la 1 AM todos los días.
Otra solución: agregue los comandos directamente al crontab de root:
sudo-s
crontab -e
Luego ingrese la línea
0 1 * * * networksetup -setnetworkserviceenabled ethernet off && networksetup -setnetworkserviceenabled ethernet on
y guardar y salir.
Es posible que desee poner esto en algún tipo de secuencia de comandos que le notifique que la red se ha reiniciado con éxito (por ejemplo, con un correo electrónico o algo así) para que esté seguro de que funcionó.
Alternativamente, puede usar un script de lanzamiento.
Rob de Jonge
mmmmmm
NicolásPP