Apa perbedaan antara "Layanan" dan "/etc/init.d/"?

113

Saya telah mengelola instalasi server baik di dalam maupun di luar rasa Ubuntu untuk beberapa waktu - saya menjadi cukup terbiasa /etc/init.d/untuk memulai ulang layanan. Sekarang saya menerima pesan ini:

root@tatooine:~# /etc/init.d/mysql status
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql status

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the status(8) utility, e.g. status mysql
mysql start/running, process 14048

Ini sepertinya telah dibawa dalam LTS terbaru Ubuntu - mengapa? Apa yang begitu buruk tentang /etc/init.d/dan apa ada perbedaan antara servicedan /etc/init.d/?

Marco Ceppi
sumber
3
The Upstart Cookbook berisi penjelasan yang baik dari yang rasional untuk beralih.
ændrük

Jawaban:

103

/etc/init.dskrip adalah cara lama dalam melakukan sesuatu. Mereka berasal dari standar System V. Namun, skrip tersebut dipecat hanya dalam urutan tertentu, sehingga tidak ada dependensi nyata yang dapat dibuat.

Oleh karena itu, pemula telah dikembangkan dengan maksud untuk mengganti semua /etc/init.dskrip dengan skrip pemula (dalam /etc/init).

servicememungkinkan transisi yang lancar dari /etc/init.dskrip ke skrip pemula. Di masa depan, ketika semakin banyak skrip ditransfer ke pemula, layanan akan tetap berfungsi karena menemukan kedua kemungkinan.

txwikinger
sumber
6
Pemula akan dihapus sekarang, kan?
wrongusername
6
systemd akan menggantikan pemula begitu rencana sudah ada - 14,04 LTS akan menggunakan pemula. Ini diumumkan oleh Mark Shuttleworth , dalam sebuah posting berjudul Kehilangan dengan ramah
bukan tambalan
28

Periksa juga halaman manual untuk perintah layanan: man service

servicemenjalankan skrip di lingkungan yang dapat diprediksi (direktori kerja adalah / dan hanya 2 variabel lingkungan yang ditetapkan: LANG dan TERM). Ini juga menambah kemampuan untuk melakukannya --full-restart. Jadi ringkasnya:

  1. service dapat menjalankan skrip dari / etc / init atau /etc/init.d (pemula atau Sistem V)
  2. service menjalankan skrip di lingkungan yang dapat diprediksi.

Aspek "lingkungan yang dapat diprediksi" dapat menyebabkan masalah jika skrip Anda bergantung pada variabel lingkungan karena beberapa alasan. Mungkin ada cara untuk menyiasatinya, tapi saya tidak tahu apa itu, dan itu di luar cakupan pertanyaan ini :)

Joe Marty
sumber
2
Hai @ Jo Marty, Ini persis masalah yang saya coba sekarang. Saya memiliki layanan yang memuat variabel lingkungan "DISPLAY" yang tidak ada ketika memulai daemon dengan "service myservice start" tetapi hadir ketika memulainya dengan "/etc/init.d/myservice start". Adakah ide tentang bagaimana agar variabel ini tersedia?
frandevel