Was ist der Unterschied zwischen "systemctl start" und "systemctl enable"?

83

Ich habe den MariaDB-Server auf meinem Rechner installiert. Beim Einrichten ist mir das Problem aufgetreten, dass ich es die ganze Zeit aktivieren muss, da das Dokument, dem ich folge, mit diesen Schritten angegeben wird.

sudo yum install mariadb mariadb-server 
sudo systemctl start mariadb.service  
sudo systemctl enable mariadb.service
Chathurika Senani
quelle
2
Sie können auch enable und start mit dem --nowswich von enablesubcommand, zum Beispiel: systemctl enable sshd --now. Gleiches gilt für den disableBefehl auch für stopden Dienst.

Antworten:

131

systemctl startund systemctl enableverschiedene Dinge tun.

enable wird das angegebene Gerät an relevanten Stellen einhängen, so dass es automatisch beim Booten oder beim Einstecken der entsprechenden Hardware oder in anderen Situationen gestartet wird, je nachdem, was in der Gerätedatei angegeben ist.

start Startet das Gerät jetzt.

disableund stopsind das Gegenteil von diesen.

Dies bedeutet, dass Sie MariaDB bei der Erstinstallation möglicherweise ausführen möchten systemctl enable mariadb.service, um es zu aktivieren, damit es beim Booten gestartet wird. Möglicherweise möchten Sie auch systemctl start mariadb.serviceMariaDB starten oder einfach neu starten. Um MariaDB zu stoppen, führen Sie es aus systemctl stop mariadb.service(es wird beim nächsten Start oder wenn Sie es manuell starten, erneut gestartet). Um es zu deaktivieren, damit es beim Booten nicht mehr startet, führen Sie es aus systemctl disable mariadb.service.

Quelle: systemctl man page

vurp0
quelle
4
++++ für klare
erklärungen
Wann sollten wir systemctl enable eingeben? Jedes Mal, wenn wir den systemd-Dienst ausführen möchten?
Goldname
Nein, wenn Sie möchten, dass es automatisch gestartet wird. Wenn Sie verhindern möchten, dass es automatisch startet, führen Sie es aus systemctl disable.
vurp0
Das heißt, wird der Dienst als root gestartet? Wie kann ich den Dienst als ein anderer Benutzer beim Booten starten?
Chaminda Bandara
18

Aus der systemctlManpage :

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.

Markiert im Wesentlichen enableden Dienst zum Starten beim Start und startstartet den Dienst tatsächlich sofort.

muru
quelle
wann sollen wir aktivieren Müssen wir es nur einmal tun?
Goldname
@Goldname Sie aktivieren es, wenn Sie es zum ersten Mal benötigen und beim nächsten Start starten. Nur einmal ist genug,
muru
Was ist, wenn wir es bearbeiten? Müssen wir wieder aktivieren?
Goldname
@Goldname muss nicht erneut aktiviert werden.
muru
Danke, und das gleiche gilt, wenn die Datei in ein anderes Verzeichnis verschoben und / oder das System neu gestartet wird?
Goldname
4

Aktivieren und deaktivieren Sie ab Systemctl-Version 220 die Unterstützung eines --now- Schalters, um Dienste gleichzeitig mit dem Aktivieren / Deaktivieren zu starten / stoppen.

z.B systemctl --now enable foobar.service

Verwenden Sie systemctl --version, um Ihre installierte Version zu überprüfen.

gerardw
quelle