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

26

Eu não tenho ideia de onde começar a procurar. Eu tenho lido sobre daemons e não entendi o conceito.

Mais detalhes:

  • Eu tenho escrito um rastreador que nunca para e indexadores sobre RSS na Internet.
  • O rastreador foi escrito em java - portanto, é um jar no momento.
  • Sou administrador em uma máquina que tem o Ubuntu 11.04.
  • Há algumas chances de a máquina travar, por isso, gostaria que o rastreador fosse executado toda vez que você inicializasse a máquina.
  • Além disso, eu gostaria que continuasse funcionando mesmo quando eu fiz logout. Não tenho certeza se isso é possível, mas na maior parte do tempo eu 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.

    
por RanZilber 28.01.2012 / 11:08

6 respostas

30

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

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

    • Iniciar script: /usr/local/bin/myapp-start.sh
    • Parar script: /usr/local/bin/myapp-stop.sh

    Cada um fornecerá as instruções para executar / parar o aplicativo. Por exemplo, o conteúdo myapp-start.sh 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 }''
    kill -9 $pid
    
  2. Crie o seguinte script ( myscript ) e coloque-o em /etc/init.d .

    /etc/init.d/myscript content:

    #!/bin/bash
    # MyApp
    #
    # description: bla bla
    
    case  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 começar com o sistema (usando SysV). Basta executar o seguinte comando ( como root ):

    update-rc.d myscript defaults 
    

PS: Eu sei que o Upstart é ótimo e bla bla, mas prefiro o antigo sistema init do SysV.

    
por Marcos Roriz Junior 29.01.2012 / 16:04
6

Sim! É possível. :) Upstart é o caminho a percorrer para garantir que o serviço continue funcionando. Tem cinco pacotes, todos instalados por padrão:

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

A aprendizagem é muito agradável e vale a pena. O Upstart tem um site: link

    
por user8290 28.01.2012 / 15:50
2

3 sugestões rápidas ...

  1. Crie um script tart S em /etc/rc3.d (modo de console multiusuário) com os K scripts incorretos correspondentes em /etc/rc.0 e /etc/rc6.d para eliminar seu programa Java uma maneira controlada quando o sistema é desligado (runevel 0) ou reinicializações (runlevel 6) Veja Uma introdução aos Runlevels .

    Você pode iniciar seu aplicativo Java no nível de execução 2 (rc2.d), mas, como rastreador, precisará do TCP / IP. Portanto, verifique se o serviço de rede está disponível / iniciado no seu runlevel 2 antecipadamente. A rede está definitivamente no nível de execução 3.

    /etc/init.d contém todos os scripts de início / eliminação reais. Os diretórios /etc/rcN.d 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 por crond deve persistir entre os logouts. Talvez adicioná-lo ao seu crontab.

  3. Um processo executado com nohup também deve persistir. Veja nohup: execute um comando mesmo depois de sair do sistema .

    $ nohup java -jar myapp.jar &
    

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

por tarmarc 28.01.2012 / 17:53
0

Esteja ciente também ao fazer aplicações com:

  update-rc.d myscript defaults 

Para ter permissões 0755 e usar ou obter antes de seu .sh o caminho. Digamos que seu script esteja em /root/test.sh, primeiro você deve mudar para CD /root/ antes de acessar test.sh .

Portanto, a melhor maneira é fazer um SH no init.d e aí mudar o caminho para o seu sh e executá-lo na função start.

    
por Şήøωў 16.05.2015 / 02:52
0

Scripts de inicialização simples com a versão Java verificando o auth agente e Windows auth-agent.bat

    
por Yuriy Tumakha 31.12.2015 / 10:19
0

A maneira mais fácil é usar supervisord . Por favor, veja os detalhes completos no link

Você também pode ver mais detalhes aqui:

Executando um arquivo jar executável quando o sistema começa

link

    
por Alan Thompson 23.11.2016 / 00:38