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.
server
services
postgresql
nxzr
fonte
fonte
Respostas:
O que você disse está correto
reload
diz 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 segurorestart
. Eu pessoalmente não usopostgresql
, então não sei.fonte
reload-or-restart
fonte
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 umaforce-reload
ação, o que significareload
se o serviço suporta erestart
se o serviço não suporta recarregar.Não sei ao certo como isso se traduz no mundo moderno do Ubuntu.
fonte
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.
fonte
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).
fonte
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. "
fonte