tl; dr: lanzador proceso nativo uso de OSX y gerente, launchd
.
Para hacerlo, haz un launchctl
demonio. Tendrás control total sobre todos los aspectos del guión. Puedes correr una vez o mantenerte vivo como un demonio. En la mayoría de los casos, este es el camino a seguir.
- Cree un
.plist
archivo de acuerdo con las instrucciones en los documentos de Apple Dev aquí o más detalles a continuación.
- Colocar en
~/Library/LaunchAgents
- Inicie sesión (o ejecute manualmente a través de
launchctl load [filename.plist]
)
Para más información launchd
, el artículo de Wikipedia es bastante bueno y describe el sistema y sus ventajas sobre otros sistemas más antiguos.
Aquí está el archivo plist específico para ejecutar un script al iniciar sesión .
Actualizado el 25/09/2017 para OSX El Capitan y más reciente (crédito a José Messias Jr ):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.loginscript</string>
<key>ProgramArguments</key>
<array><string>/path/to/executable/script.sh</string></array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Reemplace <string>
después de la tecla Programa con su comando deseado (tenga en cuenta que cualquier script al que haga referencia ese comando debe ser ejecutable: chmod a+x /path/to/executable/script.sh
para asegurarse de que sea para todos los usuarios).
Guardar como ~/Library/LaunchAgents/com.user.loginscript.plist
Ejecutar launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist
y cerrar sesión / iniciar sesión para probar (o para probar directamente, ejecutar launchctl start com.user.loginscript
)
Cola /var/log/system.log
para mensajes de error.
La clave es que esta es una entrada iniciada específica del usuario, por lo que se ejecutará al iniciar sesión para el usuario dado. Los demonios de inicio específicos del sistema (colocados en /Library/LaunchDaemons
) se ejecutan en el arranque.
Si desea que se ejecute un script al iniciar sesión para todos los usuarios, creo que LoginHook es su única opción, y esa es probablemente la razón por la que existe.