Qual é a diferença entre "systemctl start" e "systemctl enable"?

83

Instalei o servidor MariaDB na minha máquina. Ao configurar, encontrei um problema: tenho que habilitá-lo o tempo todo, pois o documento a seguir é fornecido com estas etapas,

sudo yum install mariadb mariadb-server 
sudo systemctl start mariadb.service  
sudo systemctl enable mariadb.service
Chathurika Senani
fonte
2
Você também pode enable e start com o --nowswich de enablesubcomando, por exemplo: systemctl enable sshd --now. O mesmo vale para o disablecomando também para stopo serviço.

Respostas:

131

systemctl starte systemctl enablefazer coisas diferentes.

enable conectará a unidade especificada em locais relevantes, para que inicie automaticamente na inicialização, ou quando o hardware relevante estiver conectado ou em outras situações, dependendo do que está especificado no arquivo da unidade.

start inicia a unidade agora.

disablee stopsão o oposto destes, respectivamente.

Isso significa que, quando você instala o MariaDB pela primeira vez, convém executar systemctl enable mariadb.servicepara habilitá-lo para que ele inicie na inicialização. Você também pode querer executar systemctl start mariadb.service, ou apenas reiniciar, para iniciar o MariaDB. Para parar o MariaDB, execute systemctl stop mariadb.service(ele será iniciado novamente na próxima inicialização ou quando você o iniciar manualmente). Para desativá-lo para que não inicie mais a inicialização, execute systemctl disable mariadb.service.

Fonte: página de manual systemctl

vurp0
fonte
4
++++ para explicação clara
sunleo
Então, quando devemos digitar systemctl enable? Sempre que queremos executar o serviço systemd?
Goldname 18/07/19
Não, quando você deseja fazê-lo iniciar automaticamente. Se você deseja que ele não inicie automaticamente, execute systemctl disable.
vurp0
Isso significa que o serviço é iniciado como root? Como posso iniciar o serviço como outro usuário na inicialização?
Chaminda Bandara 19/09
18

Na página de systemctlmanual :

enable NAME...
   Enable one or more unit files or unit file instances, as specified
   on the command line. This will create a number of symlinks as
   encoded in the "[Install]" sections of the unit files. After the
   symlinks have been created, the systemd configuration is reloaded
   (in a way that is equivalent to daemon-reload) to ensure the
   changes are taken into account immediately. Note that this does not
   have the effect of also starting any of the units being enabled. If
   this is desired, either --now should be used together with this
   command, or an additional start command must be invoked for the
   unit.
   ...
   Enabling units should not be confused with starting (activating)
   units, as done by the start command. Enabling and starting units is
   orthogonal: units may be enabled without being started and started
   without being enabled. Enabling simply hooks the unit into various
   suggested places (for example, so that the unit is automatically
   started on boot or when a particular kind of hardware is plugged
   in). Starting actually spawns the daemon process (in case of
   service units), or binds the socket (in case of socket units), and
   so on.

Essencialmente, enablemarca o serviço para iniciar a inicialização e, startna verdade, inicia o serviço imediatamente.

muru
fonte
quando devemos habilitar? Nós precisamos fazer isso apenas uma vez?
Goldname 18/07/19
@Goldname Ative-o na primeira vez em que for necessário na próxima inicialização. Só uma vez é suficiente,
Muru
E quando editamos? Precisamos reativar?
Goldname 19/07/19
@ Goldname, você não precisa reativá-lo.
muru 19/07/19
Obrigado, e o mesmo acontece se o arquivo for movido para um diretório diferente e / ou o sistema for reiniciado?
Goldname 19/07/19
4

A partir do systemctl versão 220, ative e desative o suporte a uma opção --now para iniciar / parar serviços simultaneamente com a ativação / desativação.

por exemplo systemctl --now enable foobar.service

Use systemctl --versionpara verificar sua versão instalada.

gerardw
fonte