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

10

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

Existe uma maneira de acionar um script para ser executado assim que um usuário terminar a sessão e parar quando outro usuário estiver conectado?

user36659
fonte

Respostas:

10

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

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

touch ~/script.sh
open -e !$

Isso 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 Logout Hookcontraparte:

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. Lembre-se de que o script é executado como roote existe apenas um gancho para login e logout, respectivamente.

Para desfazer tudo isso, insira

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ê o estiver usando apenas como sua pergunta, isso não deve ser problema.

slhck
fonte
não funciona para Yosemite
davidcondrey
5

Os ganchos de login foram descontinuados na versão 10.4 em favor do launchd. Para executar um script no login, salve uma lista como esta como ~/Library/LaunchAgents/test.plist. É 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.pliste este post do blog .

Lri
fonte
De acordo com a postagem do blog vinculado, isso carregará o plist na primeira vez que você fizer login e o manterá carregado até que o sistema reinicie. Como você usa o launchd para executar um script a cada login? Ou no logout?
precisa saber é o seguinte
-1

Para que esses ganchos funcionem na versão 10.10, você precisará fazer o seguinte:

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

  2. Na janela resultante, abra o ttysarquivo no 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 fique da seguinte forma (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 (onde está o caminho completo para o script que você deseja executar quando um usuário efetuar login) logo antes da segunda marca de citação ( ).-LoginHook /path/to/script/path/to/script"

  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:

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

Estrume
fonte
não funciona para Yosemite
davidcondrey