Bagaimana cara mengaktifkan atau menonaktifkan layanan?

820

Saya membaca tentang cara mengaktifkan dan menonaktifkan layanan di Ubuntu dan tampaknya ada berbagai kemungkinan untuk mengelolanya.

Metode pertama yang saya temukan adalah update-rc.dmenambahkan layanan baru ke startup, yang bertujuan pada /etc/init.dfolder dan isinya.

Yang lain yang saya temukan adalah mengedit .conffile di /etc/initfolder.

Apa cara yang disarankan untuk mengaktifkan / menonaktifkan / menambah layanan dan mengapa?

Bisakah Anda memberikan contoh singkat antipeluru singkat tentang cara menambahkan layanan di Ubuntu dan mengaktifkan dan menonaktifkannya?

NES
sumber
1
Untuk jaringan silakan lihat: askubuntu.com/questions/230698/…
Jorge Castro
Ini akan sangat membantu bagi mereka yang terjebak di Fedora 12 dan telah mendarat di sini. Dalam hal linkrot chkconfigadalah apa yang Anda cari.
Bleeding Fingers
3
Perhatikan bahwa jawaban untuk Ubuntu 14.04 masih hilang di sini.
Reinier Post
2
@MarcelloNuccio: Dimulai dengan Ubuntu 15.04, Pemula telah ditinggalkan karena Systemd.
Dan Dascalescu
Program mulai otomatis dikonfigurasikan dalam autostartmanifes atau *.servicefile di beberapa lokasi, serta di init.datau crontab. Lihat: unix.stackexchange.com/a/525845/43233
Noam Manos

Jawaban:

831

Ada layanan yang dapat diaktifkan / dinonaktifkan menggunakan GUI (seperti startupaplikasi) atau terminal.

Untuk Terminal Anda memiliki beberapa opsi. Pertama, buka terminal (Ketik "terminal" di dasbor, misalnya, dan buka). Kemudian:

Layanan pengaktifan / penonaktifan sementara

Untuk menghentikan dan memulai layanan sementara (Tidak mengaktifkan / menonaktifkannya untuk booting di masa mendatang), Anda dapat mengetik service SERVICE_NAME. Sebagai contoh:

  • sudo service apache2 stop(Akan BERHENTI layanan Apache sampai Reboot atau sampai Anda memulainya lagi).

  • sudo service apache2 start(Akan MULAI layanan Apache dengan asumsi itu dihentikan sebelumnya.)

  • service apache2 status (Akan memberitahu Anda STATUS layanan, jika diaktifkan / dijalankan dinonaktifkan / TIDAK berjalan.).

  • sudo service apache2 restart(Akan MEMULAI layanan. Ini paling umum digunakan ketika Anda telah mengubah, file konfigurasi. Dalam hal ini, jika Anda mengubah konfigurasi PHP atau konfigurasi Apache. Restart akan menyelamatkan Anda dari keharusan berhenti / mulai dengan 2 baris perintah) )

  • service apache2(Dalam hal ini, karena Anda tidak menyebutkan TINDAKAN untuk mengeksekusi untuk layanan, itu akan menunjukkan kepada Anda semua opsi yang tersedia untuk layanan tertentu.) Aspek ini bervariasi tergantung pada layanan, misalnya, dengan MySQL hanya akan menyebutkan bahwa itu tidak memiliki parameter. Untuk layanan lain seperti layanan jaringan, akan disebutkan daftar kecil dari semua opsi yang tersedia.


SYSTEMD

Dimulai dengan Ubuntu 15,04, Pemula akan ditinggalkan karena Systemd. Dengan Systemd untuk mengelola layanan, kami dapat melakukan hal berikut:

systemctl start SERVICE- Gunakan untuk memulai layanan. Tidak bertahan setelah reboot

systemctl stop SERVICE- Gunakan untuk menghentikan layanan. Tidak bertahan setelah reboot

systemctl restart SERVICE - Gunakan untuk memulai kembali layanan

systemctl reload SERVICE - Jika layanan mendukungnya, itu akan memuat ulang file konfigurasi yang terkait dengannya tanpa mengganggu proses apa pun yang menggunakan layanan ini.

systemctl status SERVICE- Menunjukkan status layanan. Memberitahu apakah suatu layanan sedang berjalan.

systemctl enable SERVICE- Menyalakan layanan, pada reboot berikutnya atau pada acara mulai berikutnya. Ini berlanjut setelah reboot.

systemctl disable SERVICE- Menonaktifkan layanan pada boot ulang berikutnya atau pada perhentian berikutnya. Ini berlanjut setelah reboot.

systemctl is-enabled SERVICE - Periksa apakah suatu layanan saat ini dikonfigurasi untuk memulai atau tidak pada reboot berikutnya.

systemctl is-active SERVICE - Periksa apakah suatu layanan saat ini aktif.

systemctl show SERVICE - Tampilkan semua informasi tentang layanan ini.

sudo systemctl mask SERVICE- Menonaktifkan sepenuhnya layanan dengan menautkannya ke /dev/null; Anda tidak dapat memulai layanan secara manual atau mengaktifkan layanan.

sudo systemctl unmask SERVICE- Menghapus tautan ke /dev/nulldan mengembalikan kemampuan untuk mengaktifkan dan atau memulai layanan secara manual.


UPSTART (Tidak Digunakan Sejak 15.04)

Jika kami ingin menggunakan cara Pemula resmi (Perhatikan bahwa, untuk saat ini, tidak semua layanan telah dikonversi ke Pemula), kami dapat menggunakan perintah berikut:

status SERVICE- Ini akan memberi tahu kami jika layanan yang dikonversi sedang berjalan atau tidak. Perhatikan bahwa ini usang dalam mendukung start, stop, status& restart. Ini juga akan memberi tahu kami jika layanan belum dikonversi ke pemula:

Layanan yang dikonversi biasanya akan mengeluarkan status saat ini (Memulai, Menjalankan, Menghentikan ...) dan memproses ID. Layanan yang tidak dikonversi akan memberikan kesalahan tentang pekerjaan yang tidak dikenal .

Beberapa pintasan hanya dapat bekerja dengan serviceperintah di atas tetapi tidak dengan perintah di bawah kecuali jika 100% dikonversi ke layanan pemula:

  • MULAI -sudo start mysql

  • BERHENTI -sudo stop mysql

  • Restart -sudo restart mysql

  • STATUS -sudo status smbd

Mengaktifkan / Menonaktifkan layanan

Untuk mengganti layanan dari memulai atau berhenti secara permanen, Anda perlu:

echo manual | sudo tee /etc/init/SERVICE.override

di mana bait manualakan menghentikan Pemula dari memuat layanan secara otomatis pada boot berikutnya. Setiap layanan dengan .overrideakhiran akan diutamakan daripada file layanan asli. Anda hanya akan dapat memulai layanan secara manual setelahnya. Jika Anda tidak ingin ini maka cukup hapus .override. Sebagai contoh:

echo manual | sudo tee /etc/init/mysql.override

Akan menempatkan layanan MySQL ke manualmode. Jika Anda tidak menginginkan ini, maka Anda bisa melakukannya

sudo rm /etc/init/mysql.override

dan Reboot untuk memulai layanan lagi secara otomatis. Tentu saja untuk mengaktifkan layanan, cara yang paling umum adalah dengan menginstalnya. Jika Anda menginstal Apache, Nginx, MySQL atau yang lain, mereka secara otomatis mulai setelah menyelesaikan instalasi dan akan mulai setiap kali komputer melakukan boot. Penonaktifan, seperti yang disebutkan di atas, akan menggunakan layanan ini manual.

Luis Alvarado
sumber
Apakah Anda perlu menambahkan .serviceke setiap perintah? systemctl mongod statusbekerja dengan baik.
Dan Dascalescu
@DanDascalescu tidak Anda tidak membiarkan saya menjelaskannya di sana.
Luis Alvarado
4
Haruskah file .override perlu ditempatkan di /etc/init.d/, yaitu, di mana layanan ditempatkan?
Obi Wan - PallavJha
Mengapa Pemula ditinggalkan dalam 15,04? apa cara yang tepat untuk menjalankan skrip saat start / restart di ubuntu 16.04 atau lebih baru?
Kamalakannan J
1
Terima kasih atas jawaban komprehensif ini. The systemdseperangkat perintah bekerja memperlakukan pada Ubuntu 18.04.
Doktor J
354

Saat ini sebenarnya ada tiga cara berbeda untuk perangkat lunak untuk memulai 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 /etc/init.d, dan kemudian menggunakan update-rc.dperintah (atau dalam distro berbasis RedHat chkconfig) untuk mengaktifkan atau menonaktifkannya.

Perintah ini menggunakan beberapa logika yang agak rumit untuk membuat symlink /etc/rc#.d, yang mengontrol urutan layanan awal. Jika dijalankan, ls /etc/rc2.dAnda dapat melihat urutan layanan yang akan dimatikan dengan nama file seperti K##xxxxdan mulai dengan nama file S##xxxx. The ##di S##xxxxberarti "awal order" untuk layanan xxxx. Sebaliknya, ##in K##xxxxberarti perintah penghapusan untuk layanan xxxx.

Satu masalah utama dengan SysV adalah ketika 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 dimanfaatkan sepenuhnya. Ini adalah alasan utama mengapa Upstart dibuat.

Pemula

Pemula menggunakan file definisi pekerjaan /etc/inituntuk menentukan acara apa yang harus dimulai layanan. Jadi, ketika sistem boot, pemula memulai berbagai peristiwa, 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 sedang menunggu untuk ditugaskan alamat IP dinamis.

Anda dapat melihat semua file pekerjaan pemula dengan menjalankan ls /etc/init/*.conf

Biarkan saya berhenti di sini dan katakan bahwa jika Anda tidak tahu apa itu layanan, atau apa fungsinya, JANGAN nonaktifkan!

Tidak semua layanan telah dikonversi menjadi pemula. Saat bekerja di tim server di Canonical selama beberapa bulan terakhir, saya telah bekerja pada sejumlah file pekerjaan yang dikonversi, dan bagian terbaiknya adalah ia memungkinkan seseorang untuk menyingkirkan semua skrip "sihir" dan hanya memasukkan beberapa perintah di sana-sini untuk menentukan dengan tepat bagaimana memulai layanan, dan tidak lebih. Tetapi untuk saat ini, hanya sedikit layanan jaringan tradisional, seperti squid dan samba , yang telah dikonversi.

Apakah layanan berbasis pemula?

Untuk mengetahui apakah suatu layanan berbasis pemula, Anda dapat menjalankan perintah status:

status servicename

Jika ini adalah pekerjaan pemula , itu akan menunjukkan ini:

$ status statd
statd start/running, process 942

Tetapi jika tidak, Anda akan melihat sesuatu yang lebih seperti ini:

$ status apache2
status: Unknown job: apache2

Dalam hal ini, apache2belum dikonversi menjadi kaya baru . Jadi, untuk menonaktifkan apache2Anda jalankan saja

sudo update-rc.d apache2 disable
sudo service apache2 stop

Nonaktifkan layanan (pekerjaan) di pemula

Definisi pekerjaan pemula tidak memiliki update-rc.dperintah. 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 onkondisinya. Katakanlah Anda ingin menginstal samba , tetapi tidak memulai secara otomatis. Berikut ini adalah file pekerjaan (dalam bentuk natty):

description "SMB/CIFS File Server"
author      "Steve Langasek <[email protected]>"

start on local-filesystems
stop on runlevel [!2345]

respawn

pre-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/samba
end script

exec smbd -F

Untuk menonaktifkan samba , Anda cukup meletakkan #" start on local-filesystems" di depan . Perhatikan bahwa sementara itu tidak akan mulai kembali saat boot, Anda masih harus menghentikannya kali ini

sudo service smbd stop

Namun, jika Anda tidak ingin samba memulai, saya sarankan untuk menghapus paketnya. Namun, jika Anda ingin menginstalnya, tetapi tidak dapat dijalankan, Anda juga dapat melakukan:

mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled

Nonaktifkan layanan menggunakan start / stop stanza (per 11.04)

Dimulai dengan versi kaya baru yang akan di 11.04, ada kata kunci baru yang menonaktifkan start ondan stop onbait: manual. Jadi cara lain untuk menonaktifkan layanan pada 11,04 adalah dengan melakukan:

echo 'manual' | sudo tee /etc/init/mysql.override

# command from root shell
echo manual >> /etc/init/mysql.override

Anda dapat membuat overridefile untuk menonaktifkan layanan tanpa mengedit definisi pekerjaan sama sekali, hanya dengan memasukkan manualkata kunci di dalamnya.

SpamapS
sumber
20
Sepertinya 11,04 telah menimpa juga. Jadi echo manual >> /etc/init/<service>.overridelebih disukai karena meninggalkan filke .conf asli utuh. Bagaimanapun, ini masih memalukan bahwa dasar mengaktifkan / menonaktifkan membutuhkan waktu 3 tahun untuk dikembangkan, dan tidak ada GUI untuk itu.
MestreLion
3
update-rc.d adalah yang terpenting
Timofey
2
tampaknya jauh lebih membahas topik asli daripada jawaban yang telah ditandai sebagai jawaban defintive oleh poster pertanyaan asli. Terima kasih! :)
Henning
1
Dalam kasus saya, file /etc/init/ssh.confada tetapi status sshdan status sshdkeduanya mengatakan "Pekerjaan tidak dikenal". Jawaban ini sepertinya tidak membahas kemungkinan seperti itu?
Brian Z
1
status sshmemberi saya 'Pekerjaan tidak dikenal', juga, tetapi service ssh statusbekerja untuk saya
ptim
129

sysv-rc-conf

Coba gunakan sysv-rc-conf

sudo apt-get install sysv-rc-conf

dan untuk mulai mengelola layanan, jalankan

sudo sysv-rc-conf

Yang akan memunculkan jendela interaktif seperti ini

masukkan deskripsi gambar di sini

Anda selanjutnya dapat menavigasi halaman menggunakan Ctrl+nuntuk halaman berikutnya dan Ctrl+puntuk halaman sebelumnya. Anda dapat mengaktifkan dan menonaktifkan layanan dengan memilih SPACErunlevel yang diinginkan.

Pekerjaan-Admin

Alternatif lain adalah Jobs-Admin dengan menginstal melalui

sudo apt-get install jobs-admin

Yang juga menyediakan GUI seperti ini

pratinjau jobs-admin

Untuk menampilkan lebih banyak pekerjaan, Anda harus mencentang Tampilkan Pekerjaan yang Dilindungi dari menu-nya.

chkconfig

Dan opsi ketiga adalah chkconfig ,

sudo apt-get install chkconfig

Ini dapat digunakan melalui CLI chkconfig, menampilkan daftar pekerjaan On / Off. Kami juga dapat melihat layanan sistem menggunakanchkconfig –list

Layanan dapat dihidupkan menggunakan

chkconfig <service> on

Layanan dapat dimatikan menggunakan

chkconfig <service> off

Dan kita bahkan dapat menambahkan layanan kita sendiri, menggunakan skrip init yang tepat dengan judul yang tepat.

chkconfig --add <service>

perbarui-rc.d

Dan opsi lain dapat disebut di sini pembaruan-rc.d , dijelaskan secara singkat di sini .

Perhatikan bahwa untuk Ubuntu Server 12.04, update-rc.d digunakan sebagai ganti chkconfig.

atenz
sumber
1
di server ubuntu:Package chkconfig is not available, but is referred to by another package.
pwned
@pwned Anda bebas mengedit dan memposting info terbaru mengenai edisi server. Terima kasih.
atenz
Saya melakukan seperti yang Anda sarankan, sekarang terserah peer review.
pwned
jobs-admin tidak memungkinkan untuk berganti pekerjaan (Ubuntu 14.04), sebagai gantinya menghasilkan laporan kerusakan ;-)
Sadi
5
sysv-rc-conf tidak cocok untuk digunakan dengan pemula atau systemd, itu terang-terangan hanya untuk sistem rc Sistem 5 yang lama, yang belum menjadi default di Ubuntu Linux selama hampir satu dekade. Bug Debian # 791689 mengakui ini dan mempertanyakan mengapa itu belum ditandai sebagai bertentangan dengan systemd.
JdeBP
48

Bagi kita yang menjalankan Ubuntu lebih dari ssh, saya pikir opsi terbaik adalah rcconf- program berbasis teks:

sudo apt-get install rcconf
sudo rcconf

teks alternatif

Navigasi dengan tombol tab dan panah, tekan bilah spasi untuk mengaktifkan / menonaktifkan. Perubahan bertahan di seluruh restart.

Cuplikan layar dipinjam dari blogpost ini , yang juga menunjukkan sysv-rc-conf- alat serupa yang juga memungkinkan Anda mengatur runlevel. (Bagi mereka yang cukup peduli dengan runlevel ingin mengubahnya) :)

Sayangnya, rcconf tidak berfungsi dengan pemula (layanan yang terdaftar di /etc/init/*), hanya dengan mekanisme tradisional ( ls -l /etc/init.d/*- yang tidak memiliki tautan simbolis).

Untungnya, banyak layanan yang relevan ketika melakukan ssh ke server (Apache, Tomcat, mdadm, boinc-client ...) belum dipindahkan ke pemula.

jg-faustus
sumber
6
Apakah ini masih berfungsi dengan pemula?
OKTOS
3
Sayangnya tidak ada. Tetapi ia telah bekerja untuk semua kasus yang ingin saya ubah - pekerjaan pemula tampaknya sebagian besar hal yang saya tidak pernah ingin nonaktifkan - jam perangkat keras, daemon log, jaringan dll. (Pada server Ubuntu, setidaknya). Tapi itu sesuatu yang harus diperhatikan (saya tidak :), saya telah memperbarui posting.
jg-faustus
Sayangnya mysql dikonversi menjadi pemula. Dan itu layanan yang hanya saya gunakan ketika saya melakukan beberapa proyek.
MestreLion
Ada bug dengan rcconf di Ubuntu 12.04 yang mencegah program untuk memulai. Untuk mengatasi masalah ini, Anda perlu menginstal paket dialog.
devius
1
Karena jawaban ini ditulis, update-rc.ddiubah, dan beberapa fungsinya yang sudah usang dihapus . Bug Debian # 727735 mencatat bahwa rcconf tidak diubah agar cocok. Dan tidak, rcconf juga tidak bekerja dengan systemd, jadi tidak berlaku untuk salah satu dari sistem init default untuk Ubuntu Linux selama dekade terakhir.
JdeBP
18

Saya menemukan bahwa ada alat GUI ini, sesuatu seperti BUM tetapi kompatibel dengan pemula:

  • Pekerjaan-Admin

    sudo apt-get install jobs-admin
    
Postadelmaga
sumber
Tapi itu terlalu sederhana, dan tidak memungkinkan untuk mengubah "pekerjaan yang dilindungi" (apa itu jobbs? Apple punya Jobs, sistem operasi punya daemon!)
kakaz
Saya bahkan tidak mengizinkan untuk mengubah "pekerjaan yang tidak dilindungi" (Ubuntu 14.04), sebagai gantinya menghasilkan laporan kerusakan ;-)
Sadi
12

Mengedit file konfigurasi pemula yang ada (seperti dijelaskan di atas) bukan ide yang bagus. Paket yang diperbarui dapat memberikan konfigurasi yang diperbarui, dan Anda harus mengulangi perubahan Anda berulang kali.

Dengan melihat man 5 initsatu akan menemukan solusi yang lebih tepat: menggunakan konfigurasi override. Contoh singkat: Katakanlah kita memiliki layanan yang disebut "foobar", sehingga akan ada file yang dipanggil /etc/init/foobar.confdengan konfigurasi pemula. Sekarang Anda tidak ingin menghapus file itu, atau memodifikasinya - tetapi Anda juga tidak ingin layanan ini dijalankan? Jadi menempatkan menimpa file selanjutnya untuk itu: /etc/init/foobar.override, mengandung (opsional header dengan deskripsi dan) sebaliknya start on/ stop onbaris Anda menempatkan garis dengan satu kata: manual. Dengan cara ini Anda memberi tahu pemula untuk menggunakan dasarnya foobar.conf, tetapi mengabaikan definisi startup untuk hanya memulai layanan itu ketika diberlakukan secara manual (melalui service foobar startdalam contoh kami).

Izzy
sumber