Como executar um script no login / logout no OS X?

9

Estou brincando com a criação de um gerenciador de farm de renderização personalizado e desejo adicionar automaticamente as máquinas do OS X ao farm de renderização quando elas não estiverem em uso.

Existe uma maneira de acionar um script para executar uma vez que qualquer usuário tenha efetuado logout e, em seguida, parar quando qualquer usuário tiver efetuado login?

    
por user36659 12.06.2011 / 00:26

3 respostas

9

Existem várias maneiras de executar scripts no login / logout no OS X , algumas são mais recentes e só se aplicam a 10.5 ou mais, algumas são mais obsoletas, mas a mais rápida seria adicionar Login Hook .

Primeiro, crie o script que você deseja executar. Abra um terminal e digite:

touch ~/script.sh
open -e !$

Isto irá abrir um editor de texto. Digite o script, por exemplo com o seguinte conteúdo:

#!/bin/sh
# insert your script here

Salve o arquivo. No seu terminal, execute:

chmod +x ~/script.sh

Isso tornará o arquivo executável. Agora, vamos adicioná-lo como um gancho:

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

Há também a contraparte Logout Hook :

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

Eu testei isso no OS X 10.6, e deve funcionar até 10,8. Tenha em mente que o script é executado como root e há apenas um gancho para login e logout, respectivamente.

Para desfazer tudo isso, digite

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

Observe que esse método não é recomendado para implantação nem nada, mas se você estiver usando apenas como sua pergunta afirmou, isso não será problema.

    
por 12.06.2011 / 16:56
5

Ganchos de login foram substituídos em 10.4 em favor de launchd. Para executar um script no login, salve um plist como ~/Library/LaunchAgents/test.plist . Ele é carregado no próximo login, mesmo que você não execute 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 mais informações, consulte man launchd.plist e esta postagem no blog .

    
por 15.12.2012 / 00:45
-1

Para esses ganchos funcionarem em 10.10, você precisará fazer isso:

  1. Abra o arquivo /etc/ttys : No Finder, escolha Ir para pasta no menu Ir, digite /etc/ e clique em Ir.

  2. Na janela resultante, abra o arquivo ttys em seu editor de texto preferido (como o TextEdit).

  3. Procure uma linha que leia:

    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 linha para que ela leia como segue (não há quebras nesta linha):

    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"

    , ou seja, adicione -LoginHook /path/to/script (onde /path/to/script é o caminho completo para o script que você deseja executar quando um usuário efetua login) logo antes da segunda marca de aspas ( " ) .

  5. Salve o arquivo.

Certifique-se de que o editor de texto usado para editar este arquivo não divida a linha acima em mais de uma linha.

ou siga as instruções completas aqui:

link

    
por 27.02.2015 / 21:22