¿Cómo ejecutar un script al iniciar / cerrar sesión en OS X?


10

Estoy jugando con la construcción de un administrador de granja de renderizado personalizado, y quiero agregar automáticamente máquinas OS X a la granja de render cuando no estén en uso.

¿Hay alguna manera de activar una secuencia de comandos para que se ejecute una vez que un usuario haya cerrado sesión y luego detenerse cuando algún usuario haya iniciado sesión?

Respuestas:


10

Hay varias formas de ejecutar scripts al iniciar / cerrar sesión en OS X , algunas son más recientes y solo se aplican a 10.5 y superiores, algunas son bastante obsoletas, pero la más rápida sería agregar a Login Hook.

Primero, cree el script que desea ejecutar. Abre una Terminal e ingresa:

touch ~/script.sh
open -e !$

Esto abrirá un editor de texto. Ingrese el script, por ejemplo, con los siguientes contenidos:

#!/bin/sh
# insert your script here

Guarda el archivo. En su terminal, ejecute:

chmod +x ~/script.sh

Esto hará que el archivo sea ejecutable. Ahora, vamos a agregarlo como un gancho:

sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/script.sh 

También está la Logout Hookcontraparte:

sudo defaults write com.apple.loginwindow LogoutHook /usr/local/bin/script2.sh

He probado esto en OS X 10.6, y debería funcionar incluso hasta 10.8. Tenga en cuenta que el script se ejecuta como rooty solo hay un enlace para iniciar y cerrar sesión respectivamente.

Para deshacer todo eso, ingrese

sudo defaults delete com.apple.loginwindow LoginHook
sudo defaults delete com.apple.loginwindow LogoutHook

Tenga en cuenta que este método no se recomienda para la implementación ni nada, pero si solo lo está utilizando como se indica en su pregunta, no debería haber ningún problema.


no funciona para yosemite
davidcondrey

5

Los enganches de inicio de sesión quedaron en desuso en 10.4 a favor de launchd. Para ejecutar un script al iniciar sesión, guarde un plist como este como ~/Library/LaunchAgents/test.plist. Se carga en el próximo inicio de sesión, incluso si no se ejecuta launchctl load ~/Library/LaunchAgents/test.plist.

<?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>test</string>
    <key>ProgramArguments</key>
    <array>
        <string>say</string>
        <string>test</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Para obtener más información, consulte man launchd.plisty esta publicación de blog .


De acuerdo con la publicación del blog vinculada, esto cargará la lista la primera vez que inicie sesión y la mantendrá cargada hasta que se reinicie el sistema. ¿Cómo se usa launchd para ejecutar un script en cada inicio de sesión? O al cerrar sesión?
ShadSterling

-1

Para que estos ganchos funcionen en 10.10, deberá hacer esto:

  1. Abra el /etc/ttysarchivo: en el Finder, elija Ir a la carpeta en el menú Ir, escriba /etc/y luego haga clic en Ir.

  2. En la ventana resultante, abra el ttysarchivo en su editor de texto preferido (como TextEdit).

  3. Busque una línea que lea:

    console "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow" vt100 on secure window=/System/Library/CoreServices/WindowServer onoption="/usr/libexec/getty std.9600"

  4. Edite esta línea para que se lea de la siguiente manera (no hay saltos en esta línea):

    console "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow -LoginHook /path/to/script" vt100 on secure window=/System/Library/CoreServices/WindowServer onoption="/usr/libexec/getty std.9600"

    es decir, agregue (donde está la ruta completa al script que desea ejecutar cuando un usuario inicia sesión) justo antes de la segunda comilla ( ).-LoginHook /path/to/script/path/to/script"

  5. Guarda el archivo.

Asegúrese de que el editor de texto que usa para editar este archivo no divida la línea de arriba en más de una línea.


o siga las instrucciones completas aquí:

http://support.apple.com/en-ca/HT2420


no funciona para yosemite
davidcondrey
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.