Saat ini sebenarnya ada tiga cara berbeda untuk memulai perangkat lunak sebagai layanan di Ubuntu, SysV, Upstart dan systemd. Layanan didefinisikan di sini sebagai program yang dijalankan oleh sistem di latar belakang, sebagai lawan dari yang dimulai dan dijalankan langsung oleh pengguna.
SysV
Cara tradisional untuk memulai layanan di Linux adalah dengan menempatkan skrip di /etc/init.d
, dan kemudian gunakan update-rc.d
perintah (atau di distro berbasis RedHat, chkconfig
) untuk mengaktifkan atau menonaktifkannya.
Perintah ini menggunakan beberapa logika agak rumit untuk membuat symlink di /etc/rc#.d
, yang mengontrol urutan layanan awal. Jika Anda menjalankan ls /etc/rc2.d
Anda dapat melihat urutan bahwa layanan akan dibunuh dengan nama file seperti K##xxxx
dan dimulai dengan nama file S##xxxx
. The ##
di S##xxxx
berarti "pesanan awal" untuk layanan xxxx
. Sebaliknya ##
di K##xxxx
berarti perintah membunuh untuk layanan xxxx
.
Salah satu masalah utama dengan SysV apakah itu ketika mem-boot sistem, semuanya harus dilakukan secara serial, satu demi satu, membuat waktu boot sistem sangat lambat. Upaya dilakukan untuk memparalelkan ini, tetapi mereka serampangan dan sulit untuk memanfaatkan sepenuhnya. Ini adalah alasan utama bahwa Upstart diciptakan.
Upstart
Upstart menggunakan file definisi pekerjaan di /etc/init
untuk menentukan pada apa peristiwa layanan harus dimulai. Jadi, saat sistem sedang boot, upstart memproses berbagai acara, dan kemudian dapat memulai beberapa layanan secara paralel. Ini memungkinkan mereka untuk sepenuhnya memanfaatkan sumber daya sistem, misalnya, dengan memulai layanan terikat disk Sementara Layanan terikat CPU lainnya berjalan, atau saat jaringan menunggu alamat IP dinamis untuk ditetapkan.
Anda dapat melihat semua file pekerjaan pemula dengan menjalankan ls /etc/init/*.conf
Biarkan saya berhenti di sini dan mengatakan bahwa jika Anda tidak tahu apa itu layanan, atau apa fungsinya, jangan nonaktifkan!
Tidak semua layanan telah dikonversi ke pemula. Saat bekerja di tim server di Canonical selama beberapa bulan terakhir, saya telah mengerjakan sejumlah file pekerjaan yang dikonversi, dan bagian terbaiknya adalah memungkinkan seseorang untuk menyingkirkan semua skrip "ajaib" dan hanya memasukkan beberapa perintah di sana-sini untuk menentukan dengan tepat bagaimana memulai layanan, dan tidak lebih. Tapi untuk saat ini, hanya segelintir layanan jaringan tradisional, seperti squid dan samba, telah dikonversi.
Apakah layanan berbasis pemula?
Untuk mengetahui apakah layanan berbasis pemula, Anda dapat menjalankan perintah status:
status servicename
Jika itu adalah upstart Ayub, ia akan menunjukkan ini:
$ status statdstatd start/running, process 942
Tetapi jika tidak, Anda akan melihat sesuatu yang lebih seperti ini:
$ status apache2status: Unknown job: apache2
Dalam hal ini, apache2
belum dikonversi ke upstart. Jadi, untuk menonaktifkan apache2
Anda hanya menjalankan
sudo update-rc.d apache2 disablesudo service apache2 stop
Nonaktifkan layanan (pekerjaan) di upstart
Definisi pekerjaan pemula tidak memiliki update-rc.d
perintah. Untuk menonaktifkan pekerjaan, Anda perlu mengedit file pekerjaan secara langsung untuk menonaktifkannya. Ada dua cara untuk melakukan ini.
Jika Anda ingin tetap dapat memulainya secara manual, maka Anda perlu mengomentari start on
kondisi. Katakanlah Anda ingin menginstal samba, tetapi tidak memilikinya dimulai secara otomatis. Berikut adalah file pekerjaan (di natty):
description "SMB/CIFS File Server"author "Steve Langasek <steve.langasek@ubuntu.com>"start on local-filesystemsstop on runlevel [!2345]respawnpre-start script RUN_MODE="daemons" [ -r /etc/default/samba ] && . /etc/default/samba [ "$RUN_MODE" = inetd ] && { stop; exit 0; } install -o root -g root -m 755 -d /var/run/sambaend scriptexec smbd -F
Untuk menonaktifkan samba, Anda hanya dapat menempatkan #
di depan "start on local-filesystems
". Perhatikan bahwa meskipun tidak akan memulai kembali saat boot, Anda masih perlu menghentikannya kali ini dengan
sudo service smbd stop
Namun, jika Anda tidak pernah ingin samba untuk memulai, saya sarankan untuk benar-benar menghapus paket. Namun, jika Anda ingin menginstalnya, tetapi tidak dapat dimulai, Anda juga dapat melakukannya:
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
Nonaktifkan Layanan menggunakan Start / stop Bait (per 11.04)
Dimulai dengan versi upstart yang akan ada di 11.04, ada kata kunci baru yang menonaktifkan start on
dan stop on
Bait: manual
. Jadi cara lain untuk menonaktifkan layanan pada 11.04 adalah dengan melakukan:
echo 'manual' | sudo tee /etc/init/mysql.override# command from root shellecho manual >> /etc/init/mysql.override
Anda dapat membuat override
file untuk menonaktifkan layanan tanpa mengedit definisi pekerjaan sama sekali, dengan hanya menempatkan manual
keyword di dalamnya.