“serviço {FOO} start” vs. “/etc/init.d/{FOO} start”? [fechadas]

5

Eu uso o CrashPlan no meu desktop Debian 8. Eu tenho um script onde devo parar o serviço CrashPlan no início e iniciá-lo antes de sair. Eu estava usando

/etc/init.d/crashplan start

para a reinicialização, mas o novo processo do CrashPlan estava sendo encerrado no encerramento do meu script. Mudei para

service crashplan start

e tudo está bem!

Estranhamente, no Ubuntu 16.04 em outra caixa, o script init.d / command se comporta como desejado. Quando meu script sai, o CrashPlan continua a rodar. Welp, agora o Ubuntu está me dando os mesmos problemas.

Meu script Debian agora está funcional. Mas fiquei com a impressão de que o comando service estava a caminho da desaprovação, por isso estou intrigado com as diferenças, tanto entre init.d e service , e entre as versões atuais do Debian e do Ubuntu.

    
por DavidF 30.05.2016 / 13:34

1 resposta

8

Em qualquer sistema que use o systemd, a execução direta de um script init.d não será a melhor maneira de iniciar um serviço, pois ele ignorará todas as configurações e a contabilidade normalmente feitas pelo próprio systemd. Além disso, você pode até não ter um script de inicialização, o serviço pode ser descrito apenas em um arquivo de unidade.

Com o sysvinit de "estilo antigo" não havia muita escrituração para fazer: iniciar um serviço era praticamente o mesmo que executar um script. Isso não significa que foi uma boa idéia para o script de inicialização diretamente, a descrição na página de manual de service diz o porquê:

service runs a System V init script or upstart job in as predictable an environment as possible, removing most environment variables and with the current working directory set to /.

Um shell aleatório não é um ambiente muito previsível, você poderia ter, por exemplo limites de arquivo ou processo ativos.

Quanto à depreciação, talvez você deva usar systemctl , mas no Debian service na verdade tenta fazer a coisa certa e executa systemctl para você. (Digamos apenas que, se service for reprovado, executar um script de inicialização diretamente é ainda mais).

(Eu não sou o suficiente de um especialista do systemd para dizer exatamente o que mata o serviço se você executar o script init diretamente. Isso também depende do que executa o script que você está executando: do cron, da linha de comando, do outra coisa ...)

    
por 30.05.2016 / 15:20