Execute o jar na inicialização em todos os sistemas baseados em * nix

1

Eu tenho um arquivo jar que eu preciso rodar na inicialização em todas as distribuições do Linux. A minha pergunta anterior aqui , deu-me uma ideia aproximada em X-servers . Como não consegui executar a inicialização, passei para a ideia de adicionar um arquivo .desktop a /etc/xdg/autostart . Isso funciona para o Ubuntu e atualmente eu estou testando no Linux Mint ambas as versões canela e mate. Eu fiz uma pequena pesquisa para outras distribuições, mas eles não parecem ter o /etc/xdg/autostart , em vez disso, eles têm /xdg-autostart , mas eu preciso executar meu arquivo jar em todas as distribuições do Linux. Eu tentei crontab mas @reboot não funcionou no Ubuntu 14.04 para mim. Outro problema é que eu preciso remover o arquivo que estou colocando para a inicialização quando eu desinstalar o jar. Se eu editar o rc.local, não poderei reverter a edição. Existe uma maneira comum em que eu posso fazer o arranque no Linux

    
por Joker 28.05.2014 / 15:32

2 respostas

2

Não existe um método universal para criar um serviço de sistema em todas as distribuições GNU / Linux, uma vez que eles usam uma variedade de sistemas init. Era uma vez todos eles usaram mais ou menos o mesmo init de estilo SysV (exceto alguns que usavam mais Sistema de estilo BSD), que permitia a escrita de scripts init genéricos que requeriam pouca modificação da distro para a distribuição.

Atualmente, o SysV ainda é usado por diversas distros, como Debian e RHEL / CentOS. No entanto, os sistemas init mais recentes - systemd (Fedora, Arch, et. Al.) E upstart (Ubuntu) 1 inclui mecanismos para suporte retroativo de scripts init estilo SysV, portanto, se você estiver procurando pelo método mais facilmente adotado para uso na maioria dos sistemas, ainda é isso.

Tenha em mente que o "linux" não é um sistema operacional no sentido de que "Windows 8" ou "OSX" são sistemas operacionais. Linux é um kernel do sistema operacional usado em uma ampla variedade de plataformas (por exemplo, Android); coloquialmente "GNU / Linux" refere-se à coleção de distribuições de SO discutidas acima, mas estas não são todas iguais. Não há intenção séria ou desejo de unificá-los, assim como não há intenção séria ou desejo de unificar o Windows e o OSX para que, por exemplo, alguém possa perguntar "Como posso executar o meu arquivo jar na inicialização do OSX e do Windows? " - você está sem sorte, você precisará empacotá-lo separadamente para cada um deles. Isto é, na verdade, como o software no mundo linux geralmente é distribuído; existem pacotes separados para cada distribuição.

1 MAS O Ubuntu (e o Debian) estão mudando para systemd , significando o upstart provavelmente desaparecerá, e a maioria das principais distros terá um sistema init comum.

    
por 29.05.2014 / 12:39
4
Lamentavelmente, não acredito que exista uma maneira única e universal de realizar exatamente o que você quer. Cada nix possui um sistema init, e existem vários sistemas init diferentes (SysV, Upstart, systemd, etc.). Agora, o systemd tem algum suporte para rodar daemons SysV, então você pode conseguir escrever um script SysV e fazer com que ele funcione para ambos, mas eu não sei como isso funcionará com o Upstart e outros sistemas. Posso ver dois cursos de ação que ainda podem ajudar você a atingir sua meta:

  1. Escreva um serviço para cada sistema de inicialização principal (observe que muitas distros estão migrando para o systemd, por isso pode ser bom para começar).

  2. Desista de executá-lo na inicialização e tente executá-lo um pouco mais tarde.

Por exemplo, embora os sistemas init ainda sejam bastante fragmentados, o login do shell é praticamente universal. Você pode adicionar algumas linhas a cada $HOME/.shellrc executando o jar, se ele ainda não tiver sido executado. Fazer isso seria muito menos trabalho e muito mais aplicável universalmente.

A vantagem óbvia de 1 é que ele executaria o jar antes que os usuários vissem qualquer coisa. No entanto, isso pode ser mitigado em 2 configurando o login automático (embora não seja uma boa ideia para segurança).

Note que, se esta for uma jarra de GUI, então você terá um número razoável de dores de cabeça extras (fazer X, ou Wayland iniciar para que seu jar possa rodar irá adicionar algumas linhas, pelo menos, a qualquer coisa solução que você decide).

    
por 28.05.2014 / 16:53