dr: use o iniciador e gerenciador de processos nativo do OSX launchd
,.
Para fazer isso, faça um launchctl
daemon. Você terá controle total sobre todos os aspectos do script. Você pode executar uma vez ou manter-se vivo como um daemon. Na maioria dos casos, este é o caminho a percorrer.
- Crie um
.plist
arquivo de acordo com as instruções nos documentos do Apple Dev aqui ou com mais detalhes abaixo.
- Colocar em
~/Library/LaunchAgents
- Faça login (ou execute manualmente via
launchctl load [filename.plist]
)
Para mais informações launchd
, o artigo da Wikipedia é bastante bom e descreve o sistema e suas vantagens sobre outros sistemas mais antigos.
Aqui está o arquivo plist específico para executar um script no login .
Atualizado 25/09/2017 para OSX El Capitan e mais recente (crédito para 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>
Substitua a <string>
chave depois do programa pelo comando desejado (observe que qualquer script referenciado por esse comando deve ser executável: chmod a+x /path/to/executable/script.sh
para garantir que seja para todos os usuários).
Salvar como ~/Library/LaunchAgents/com.user.loginscript.plist
Execute launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist
e efetue logout / logon para testar (ou testar diretamente, executar launchctl start com.user.loginscript
)
Cauda /var/log/system.log
para mensagens de erro.
A chave é que essa é uma entrada launchd específica do usuário, portanto ela será executada no login do usuário especificado. Daemons de inicialização específicos do sistema (colocados em /Library/LaunchDaemons
) são executados na inicialização.
Se você deseja que um script seja executado no login para todos os usuários, acredito que o LoginHook é sua única opção, e provavelmente é por isso que existe.