Como fazer um arquivo jar ser executado na inicialização e quando você sai?

Como fazer um arquivo jar ser executado na inicialização e quando você sai?

Não tenho ideia por onde começar a procurar. Tenho lido sobre daemons e não entendi o conceito.

Mais detalhes :

  • Estou escrevendo um rastreador que nunca para e rastreia RSS na internet.
  • O rastreador foi escrito em java - portanto, é um jar agora.
  • Sou administrador de uma máquina que possui Ubuntu 11.04.
  • Há algumas chances de a máquina travar, então gostaria que o rastreador fosse executado sempre que você inicializar a máquina.
  • Além disso, gostaria que ele continuasse funcionando mesmo quando eu desconectasse. Não tenho certeza se isso é possível, mas na maioria das vezes estou desconectado e ainda quero rastreá-lo.

Alguma ideia? Alguém pode me apontar na direção certa?

Apenas procurando a solução mais simples.

Responder1

Aqui está uma maneira fácil de fazer isso usando SysVInit. Instruções:

  1. Crie o script de início e parada do seu aplicativo. Coloque-o em algum diretório, no nosso exemplo é:

    • Iniciar roteiro:/usr/local/bin/myapp-start.sh
    • Script de parada:/usr/local/bin/myapp-stop.sh

    Cada um fornecerá instruções para executar/parar o aplicativo. Por exemplo, o myapp-start.shconteúdo pode ser tão simples quanto o seguinte:

    #!/bin/bash
    
    java -jar myapp.jar 
    

    Para o script de parada pode ser algo assim:

    #!/bin/bash
    # Grabs and kill a process from the pidlist that has the word myapp
    
    pid=`ps aux | grep myapp | awk '{print $2}'`
    kill -9 $pid
    
  2. Crie o seguinte script ( myscript) e coloque-o em /etc/init.d.

    /etc/init.d/myscriptcontente:

    #!/bin/bash
    # MyApp
    #
    # description: bla bla
    
    case $1 in
        start)
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
        stop)
            /bin/bash /usr/local/bin/myapp-stop.sh
        ;;
        restart)
            /bin/bash /usr/local/bin/myapp-stop.sh
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
    esac
    exit 0
    
  3. Coloque o script para iniciar com o sistema (usando SysV). Basta executar o seguinte comando (como raiz):

    update-rc.d myscript defaults 
    

PS: Eu sei que o Upstart é ótimo e bla bla, mas prefiro o antigo sistema de inicialização SysV.

Responder2

Sim! É possível. :)Subir na vidaé o caminho a seguir para garantir que o serviço continue funcionando. Possui cinco pacotes, todos instalados por padrão:

  • Upstart daemon init e utilitário initctl
  • upstart-logd fornece o daemon logd e o arquivo de definição de tarefa para o serviço logd
  • upstart-compat-sysv fornece arquivos de definição de trabalho para as tarefas rc e as ferramentas reboot, runlevel, shutdown e telinit que fornecem compatibilidade com SysVinit
  • startup-tasks fornece arquivos de definição de trabalho para tarefas de inicialização do sistema
  • system-services fornece arquivos de definição de trabalho para serviços tty

O aprendizado é muito prazeroso e vale a pena. A Upstart tem um site:http://upstart.ubuntu.com/

Responder3

3 sugestões rápidas...

  1. Criar umaSscript tart em /etc/rc3.d(modo de console multiusuário) com correspondenteKmal scripts /etc/rc.0e /etc/rc6.dpara encerrar seu programa Java de maneira controlada quando o sistema é desligado (runevel 0) ou reinicializado (runlevel 6) ConsulteUma introdução aos níveis de execução.

    Você poderá iniciar seu aplicativo Java no nível de execução 2 (rc2.d), mas, como rastreador, ele precisará de TCP/IP. Portanto, certifique-se de que seu serviço de rede esteja disponível/iniciado no nível de execução 2 com antecedência. A rede está definitivamente em alta no nível de execução 3.

    /etc/init.dcontém todos os scripts de início/eliminação reais. /etc/rcN.dos diretórios contêm apenas links para eles, prefixados com S ou K para iniciá-los ou eliminá-los respectivamente, por nível de execução N.

  2. Um processo executado cronddeve persistir entre logouts. Talvez adicione-o ao seu crontab.

  3. Um processo executado nohuptambém deve persistir. Vernohup: executa um comando mesmo depois de sair.

    $ nohup java -jar myapp.jar &
    

    Por padrão, myapp.jara saída padrão irá para um arquivo chamado ./nohup.out, ou $HOME/nohup.outse o primeiro não for gravável.

Responder4

Scripts de inicialização simples com verificação de versão Java para Linuxagente de autenticação e janelasauth-agent.bat

informação relacionada