Apa perbedaan antara layanan dan systemctl?

33

Mungkin ini adalah pertanyaan sepele, tetapi tidak sepenuhnya jelas bagi saya. Di salah satu server kami, kami memiliki beberapa proses latar belakang yang berjalan yang dimulai dengan servicedan beberapa lainnya yang dimulai dengan systemctl, seperti ini:

$ service nginx start
$ systemctl start gunicorn

Apa perbedaan antara kedua perintah? Mana yang merupakan cara yang disukai untuk menangani layanan latar belakang? Bagaimana cara mengkonfigurasi perintah yang disukai?

Aidas Bendoraitis
sumber
3
ada penjelasan yang sangat bagus di sana
Félix Brunet
Bagian yang menyakitkan dari ini, ada yang mengatakan layanan 'mati' dan jika tidak, mengapa mereka mengubah urutan argumen dengan 'find / grep / cari' dll ... tidak ada konsistensi dalam rilis linux :(
killjoy

Jawaban:

37

serviceadalah perintah "tingkat tinggi" yang digunakan untuk memulai dan menghentikan layanan di berbagai unix dan linux. Bergantung pada manajer layanan "tingkat bawah", servicepengalihan pada binari yang berbeda.

Misalnya, pada CentOS 7 ia dialihkan ke systemctl, sedangkan pada CentOS 6 itu langsung memanggil /etc/init.dskrip relatif . Di sisi lain, di Ubuntu yang lebih lama rilisnya dialihkan keupstart

servicememadai untuk manajemen layanan dasar, sementara panggilan langsung systemctlmemberikan opsi kontrol yang lebih besar.

shodanshok
sumber
9

systemctlpada dasarnya adalah versi yang lebih kuat service.

Dengan serviceAnda hanya dapat melakukan perintah yang berkaitan dengan layanan (yaitu status, reload, restart) sedangkan dengan systemctlAnda dapat menggunakan perintah yang lebih maju seperti:

systemctl is-failed name.service # check if service failed to load

Atau layanan masking:

systemctl mask name.service

Ada banyak info bagus di halaman ini dari Ask Ubuntu.

SamCyanide
sumber
1

systemctladalah utilitas utama untuk mengendalikan daemon / layanan systemd,
sedangkan serviceperintahnya adalah utilitas tradisional di SysVinitdunia.

Salah satu fitur systemd adalah agar kompatibel dengan perintah SysVinit / legacy,
jadi, jika Anda memiliki systemctlperintah,
service foo startakan menjadi pembungkus systemctl start foo.

Kisah yang sama untuk chkconfig.

maioman
sumber