Qual é a maneira mais fácil de executar um script no momento da inicialização no OS X?


12

Eu quero que um script (bash / zsh / ruby ​​/ ...) seja executado no momento da inicialização no OS X. Qual é a maneira mais simples de fazer isso, sem mexer com arquivos xml / plist e, de preferência, sem precisar criar um meta AppleScript .

Respostas:


7

O MacOS X usa o Vixie cron, que possui metatags especiais para iniciar no momento da reinicialização. Consulte a página do manual para o formato do arquivo.

algo como:

@reboot /path/to/script.sh

no seu crontab funcionaria. Não tenho certeza de que essa seja uma solução melhor que o launchd, você provavelmente tem mais meta-ferramentas que olham para launchd do que o cron.


Adorei, você provou que eu estava errado :-) Embora cronno OS X não seja tão bom com o registro por padrão (havia um tópico sobre isso há apenas alguns dias).
Daniel Beck

isto é perfeito.
John Bachir

1
Observe que o cron, at e assim por diante são, em certa medida, reprovados no OS X. Não consigo encontrar uma declaração explícita disso nos vários documentos, nem sei quão agressivamente eles são obsoletos, mas o launchd parece geralmente preferido. Veja a documentação do launchd para uma introdução.
Norman Gray

O plist não funcionará para mim - isso funciona como um encanto - obrigado! :-D
BG Bruno

Honestamente não tinha certeza se a sintaxe seria o mesmo no OS X.
NobleUplift

6

Caso você mude de opinião:

<?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.superuser.245713</string>
    <key>ProgramArguments</key>
    <array>
        <string>/path/to/script.sh</string>
    </array>
    <key>UserName</key>
    <string>someuser</string>
</dict>
</plist>

Armazene como com.superuser.245713.plistem /Library/LaunchAgents/e faça root:wheelo proprietário / grupo.


1
É sem dúvida melhor para colocá-lo em /Library/LaunchAgentsvez de /System/Library/LaunchDaemonsuma vez /Systemé coisa OS-específico e aquela sob /Libraryé usado mais para o material de terceiros. Além disso, LaunchDaemons"deve conter itens que serão executados como raiz, geralmente processos em segundo plano", onde LaunchAgents"executados como usuário ou no contexto da área do usuário". A fonte dessas citações é um ótimo artigo sobre o launchd que eu consulte para perguntas do launchd.
Doug Harris

@DougHarris Obrigado pelas sugestões! Devo admitir que estava apenas digitando esse ad-hoc - enquanto costumo testar minhas soluções, não estava disposto a reiniciar minha máquina para isso.
Daniel Beck

Isso é muito bom, embora eu como a solução cron Vixie melhor :)
John Bachir

Na verdade, ele deve ser colocado em / Library / LaunchDaemons. Os agentes são executados apenas dentro de uma sessão do usuário, ou seja, eles não serão executados (ou mais precisamente, se qualificarão para executar) até que alguém faça login, execute novamente sempre que alguém fizer login e sempre execute como o usuário conectado no momento. Os daemons são executados (/ tornam-se elegíveis para execução) na inicialização e, embora normalmente sejam executados como root, podem ser executados como outro usuário com a chave UserName.
Gordon Davisson


2

Também existem ganchos de login, se você preferir que o script seja executado (como root) quando um usuário efetuar login em vez de quando a máquina for inicializada.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.