Apa perbedaan antara "systemctl start" dan "systemctl enable"?

84

Saya menginstal MariaDB-server ke mesin saya. Saat mengatur saya bertemu dengan masalah apakah saya harus mengaktifkannya sepanjang waktu karena dokumen yang saya ikuti diberikan dengan langkah-langkah ini,

sudo yum install mariadb mariadb-server 
sudo systemctl start mariadb.service  
sudo systemctl enable mariadb.service
Chathurika Senani
sumber
2
Anda bisa juga enable dan start dengan --nowswich dari enablesubcommand, misalnya: systemctl enable sshd --now. Hal yang sama berlaku untuk disableperintah juga stoplayanan.

Jawaban:

132

systemctl startdan systemctl enablemelakukan berbagai hal.

enable akan mengaitkan unit yang ditentukan ke tempat-tempat yang relevan, sehingga ia akan secara otomatis mulai saat boot, atau ketika perangkat keras yang relevan dicolokkan, atau situasi lain tergantung pada apa yang ditentukan dalam file unit.

start memulai unit sekarang.

disabledan stopkebalikan dari ini, masing-masing.

Ini berarti bahwa ketika Anda pertama kali menginstal MariaDB, Anda mungkin ingin menjalankan systemctl enable mariadb.serviceuntuk mengaktifkannya sehingga mulai saat boot. Anda mungkin juga ingin menjalankan systemctl start mariadb.service, atau hanya reboot, untuk memulai MariaDB. Untuk menghentikan MariaDB, jalankan systemctl stop mariadb.service(itu akan mulai lagi pada boot berikutnya atau ketika Anda memulainya secara manual). Untuk menonaktifkannya agar tidak mulai saat boot lagi, jalankan systemctl disable mariadb.service.

Sumber: halaman manual systemctl

vurp0
sumber
4
++++ untuk penjelasan yang jelas
sunleo
Jadi kapan kita harus mengetikkan systemctl enable? Setiap kali kita ingin menjalankan layanan systemd?
Goldname
Tidak, ketika Anda ingin membuatnya mulai secara otomatis. Jika Anda ingin menghentikannya dari mulai secara otomatis maka Anda jalankan systemctl disable.
vurp0
Itu berarti, apakah layanan mulai sebagai root? Bagaimana saya bisa memulai layanan sebagai pengguna lain saat boot?
Chaminda Bandara
18

Dari halaman 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.

Pada dasarnya, enablemenandai layanan untuk memulai boot, dan startbenar - benar memulai layanan segera.

muru
sumber
kapan kita harus mengaktifkan? Apakah kita hanya perlu melakukannya sekali saja?
Goldname
@Goldname Anda mengaktifkannya saat pertama kali Anda membutuhkannya untuk memulai boot berikutnya. Hanya sekali saja sudah cukup,
muru
Bagaimana dengan saat kita mengeditnya? Apakah kita perlu mengaktifkan kembali?
Goldname
@Goldname Anda tidak perlu mengaktifkannya kembali.
muru
Terima kasih, dan hal yang sama berlaku jika file dipindahkan ke direktori yang berbeda dan / atau sistem di-reboot?
Goldname
4

Pada systemctl versi 220, aktifkan dan nonaktifkan dukungan switch --sekarang untuk memulai / menghentikan layanan bersamaan dengan mengaktifkan / menonaktifkan.

misalnya systemctl --now enable foobar.service

Gunakan systemctl --versionuntuk memeriksa versi yang Anda instal.

gerardw
sumber