Qual é a diferença entre "service restart" e "service reload"

74

Estou tentando entender a diferença entre service restart [someservice]e service reload [someservice]. Entendo que "reiniciar" reinicia o serviço, enquanto "recarregar" recarrega a configuração, mas não entendo as implicações práticas disso o suficiente para determinar qual devo usar em um determinado contexto.

Um exemplo: a maioria dos guias que li para configurar o PostgreSQL diz que, depois de editar o postgresql.conf e o pg_hba.conf para permitir conexões remotas, devo emitir sudo service postgresql restart. No entanto, se eu estivesse adivinhando qual usar com base na descrição acima, escolheria "recarregar".

Caso isso importe, estou no Ubuntu 11.10 - apesar de esperar uma explicação o mais aplicável possível.

nxzr
fonte
2
Alguns anos atrás, eu estava executando um servidor com vários milhares de usuários. reiniciar o Apache não foi rápido por qualquer motivo, levaria cerca de 3 minutos para reiniciar o apache (razões). De qualquer forma, se o servidor estivesse inativo por 3 minutos, meu chefe receberia cerca de 800 telefonemas. Com o serviço recarregado, 0 telefonemas. Essa é a diferença.
J0h

Respostas:

41

O que você disse está correto reloaddiz ao serviço para recarregar seus arquivos de configuração. Isso significa que deve ser suficiente recarregar a configuração; no entanto, pode haver certos serviços que "não seguem a regra" ou que não recarregam os arquivos de configuração. Devido a isso, você provavelmente está mais seguro restart. Eu pessoalmente não uso postgresql, então não sei.

jman6495
fonte
11
Enquanto isso, existe:reload-or-restart
Suuuehgi
Para o PostgreSQL, você pode aplicar alterações no /etc/postgresql/version/main/postgresql.conf com uma atualização. A aplicação de alterações no pg_hba.conf requer uma reinicialização.
Aidan Melen
63
  • restart = parar + iniciar
  • recarregar = permanecer em execução + ler novamente os arquivos de configuração.
Abdennour TOUMI
fonte
8

Nem todos os serviços são compatíveis reload. Para aqueles que o fazem, geralmente é preferível reiniciar (ou seja, recarregar causa menos ou nenhum tempo de inatividade).

O Manual de Políticas Debian especifica que todo /etc/init.d/script deve suportar uma force-reloadação, o que significa reloadse o serviço suporta e restartse o serviço não suporta recarregar.

Não sei ao certo como isso se traduz no mundo moderno do Ubuntu.

Marius Gedminas
fonte
11
O Manual de Políticas Debian foi um link realmente útil, obrigado.
não é um patch
11
mais apoio de recarga, se não através do serviço do sistema, pensou /etc/init.d/SomeProgram recarga
j0h
4

Para expandir عبد النور التومي, responda com a minha experiência com o systemd.

No systemd, sempre que um processo é iniciado, ele é executado no contexto do systemd, o exemplo mais claro disso é com as variáveis ​​de ambiente definidas em seu arquivo de unidade.

Portanto, quando você envia um systemctl reload [someservice]sinal, ele envia um sinal ao serviço para recarregar-se normalmente, se for suportado. Caso contrário, o processo simplesmente ignorará o sinal. Isso é configurável.

O que quero dizer com graciosamente? para iniciar novos trabalhadores com a nova configuração ou código e interromper os trabalhadores antigos quando eles terminarem de atender às solicitações atuais, se houver.

E se você systemctl restart [someservice]solicitar, o systemctl informará o serviço para parar, destrua o contexto atual do systemd, crie um novo e execute o serviço novamente. Isso faz sentido, por exemplo, para recarregar variáveis ​​de ambiente em um contexto systemd ou se um recarregamento não for suportado.

Espero que isso esclareça um pouco e se eu estiver errado em algo, por favor me avise.

Gaston Sanchez
fonte
0

atualmente, se um serviço precisar ser acionado (por exemplo, um arquivo de configuração alterado), você pode notificar o serviço, mas isso leva a uma reinicialização. Seria bom se uma recarga fosse feita se o serviço já estivesse em execução (embora suponha que existam alguns serviços que exigem reinicializações para alguns arquivos, recarregamentos para outros).

O exemplo mais complexo que consigo pensar é algo como o Apache. Normalmente, você pode simplesmente pedir para recarregar, no entanto, às vezes, é necessário solicitar uma reinicialização (se você adicionar / remover módulos, por exemplo).

One Zero
fonte
0

O postgres é um bom exemplo para grandes diferenças entre recarregar e reiniciar, porque o último precisa desconectar todos os clientes do banco de dados.

quando as conexões não devem reverter, você pode interromper o serviço sem um "--force" primeiro usando pg_ctlcluster .

em /etc/postgres/{version}/{dbname}/postgresql.conf e em http://www.postgresql.org/docs/manuals/ todos os parâmetros têm uma observação como "Este parâmetro só pode ser definido na inicialização do servidor. "

maletin
fonte