Como usar o launchd para garantir que um aplicativo esteja sendo executado?

2

Eu uso o Quicksilver, que é um ótimo programa que realmente acelera meu trabalho. Eu configurei para iniciar quando eu fizer login.

No entanto, desde o Snow Leopard, ele se torna um pouco menos estável e, de vez em quando, ele falha. E obviamente, não será reiniciado por si só.

Tenho certeza de que posso usar launchd para garantir que ele esteja sempre em execução quando eu estiver conectado. Existe um bom guia / exemplo de como garantir que um processo seja reiniciado quando for eliminado / terminado / travado com ele? ?

    
por zneak 28.04.2010 / 00:16

2 respostas

3

Pesquisando launchd quicksilver , obtive este website ... que parece certo.

Aqui está a essência disso no caso de a página desaparecer:

  • Nas preferências do QS, desative “iniciar no login”

  • Crie um novo LaunchAgent na minha conta, armazenando o seguinte arquivo como ~ / Library / LaunchAgents / org.quicksilver.plist (na verdade, usei o Lingon para criar o arquivo - utilitário muito útil!):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>org.quicksilver</string>
        <key>ProgramArguments</key>
        <array>
                <string>/Applications/Quicksilver.app/Contents/MacOS/Quicksilver</string>
        </array>
</dict>
</plist>

Consulte man launchd.plist para obter mais informações sobre as chaves que você pode colocar em um arquivo plst launchd para controlar quando e como o launchd inicia ou reinicializa processos.

Veja também: Criando Daemons e Agentes de Lançamento .

    
por 28.04.2010 / 03:29
0

Eu não tentei isso, como eu não tenho um mac, mas eu tenho dito que tem bash como shell padrão nos dias de hoje. Você poderia fazer isso com um script bash que você executa no logon por qualquer meio.

O que basicamente faz é executar o comando dado repetidamente até que ele retorne zero, o que significa que ele é fechado normalmente.

#!/bin/bash

RETVAL=1
until [ $RETVAL -eq 0 ]; do
    # change this to whatever is used to launch quicksilver
    /Applications/Quicksilver.app/Quicksilver

    RETVAL=$?
done

Edit: Para esclarecer, coloque isso em um arquivo de texto vazio (opcionalmente com uma extensão .sh) e dê a ele permissões de execução ( chmod +x filename ) e isso deve funcionar.

    
por 28.04.2010 / 00:56

Tags