Bagaimana cara kerja layanan di Debian, dan bagaimana saya bisa mengelolanya?

79

Di Windows saya memiliki manajer layanan, di mana saya melihat semua layanan sistem, yang dapat dimulai melalui Windows itu sendiri, saya mengatur pengguna yang digunakannya, manajemen hak ada di sana, dan saya bisa meneruskan variabel dan beberapa informasi lain ke layanan , Saya dapat memberi nama mereka, dan saya dapat membuat layanan duplikat dari satu program dan sebagainya. Jadi saya punya alat manajemen utama di Windows.

Bagaimana saya bisa melakukan hal yang sama di Linux? Bagaimana saya dapat memicu untuk menjalankan "svnserve" saat startup, atau bagaimana saya bisa mengkonfigurasi layanan agar berjalan dalam konteks khusus. Bagaimana saya bisa melihat semua layanan "terprogram"?

Erdinc Ay
sumber
9
Distribusi dan versi apa yang Anda gunakan? Manajemen layanan (layanan hampir selalu disebut 'daemon' di dunia Unix) dulu mudah dan semi-standar. Banyak hal yang lebih bervariasi hari ini. Dan tidak selalu menyenangkan. :) Juga, apa yang Anda maksud dengan konteks ?
Alexios
Meskipun tampaknya systemd perlahan memenangkan perang sistem init. Debian adalah ketidaksepakatan besar terakhir yang masih menggunakan SysVinit lama, dan saat ini sedang dalam proses menentukan sistem init mana yang akan digunakan.
Patrick
1
Saat ini saya bekerja dengan Debian (stable terbaru), dan menurut konteks saya maksud path-variable atau konteks pengguna yang ditentukan.
Erdinc Ay
1
Jika Anda hanya perlu menggunakan serverperintah di Debian, lihat unix.stackexchange.com/q/226089/130402
Peter Krauss

Jawaban:

124

Saat ini ada 3 sistem init utama yang digunakan oleh linux. Beberapa tahun yang lalu, hanya ada satu, SysVinit. Tetapi SysVinit secara serius kurang dalam kemampuan seperti grafik ketergantungan layanan, sehingga sudah ditinggalkan di sebagian besar distro sekarang. Saat ini sebagian besar distro beralih ke systemd . Padahal ada juga pemula .

Tapi inilah jawaban untuk pertanyaan Anda untuk masing-masing dari 3 sistem init:

 

SysVinit

SysVinit saat ini digunakan oleh Debian dan RedHat. Padahal versi RedHat berikutnya (7) akan menggunakan systemd.

Cara universal untuk mengaktifkan layanan SysVinit saat boot adalah dengan menghubungkannya di /etc/rc3.d(atau /etc/rc2.d). Semua layanan dapat ditemukan di /etc/init.d. Perhatikan bahwa distro akan sering memiliki alat sendiri untuk mengelola file-file ini, dan alat itu yang seharusnya digunakan. (Fedora / RedHat memiliki servicedan chkconfig, ubuntu memiliki update-rc.d)

Daftar layanan:

ls /etc/init.d/

Memulai layanan:

/etc/init.d/{SERVICENAME} start

atau

service {SERVICENAME} start

Hentikan layanan:

/etc/init.d/{SERVICENAME} stop

atau

service {SERVICENAME} stop

Aktifkan layanan:

cd /etc/rc3.d
ln -s ../init.d/{SERVICENAME} S95{SERVICENAME}

( S95digunakan untuk menentukan pesanan. S01 akan mulai sebelum S02, dll)

Nonaktifkan layanan:

rm /etc/rc3.d/*{SERVICENAME}

 

Systemd

Distribusi paling terkenal menggunakan systemd adalah Fedora. Padahal ini digunakan oleh banyak orang lain. Selain itu, dengan Debian memilih untuk pergi dengan systemd overstart, itu akan menjadi sistem pemula yang defacto untuk sebagian besar distribusi (ubuntu telah mengumumkan mereka akan menjatuhkan pemula untuk systemd).

Daftar layanan:

systemctl list-unit-files

Memulai layanan:

systemctl start {SERVICENAME}

Hentikan layanan:

systemctl stop {SERVICENAME}

Aktifkan layanan:

systemctl enable {SERVICENAME}

Nonaktifkan layanan:

systemctl disable {SERVICENAME}

 

Pemula

Pemula dikembangkan oleh orang-orang Ubuntu. Tetapi setelah debian memutuskan untuk pergi dengan systemd , Ubuntu mengumumkan bahwa mereka akan drop up pemula .

Pemula juga secara singkat digunakan oleh RedHat, karena hadir di RHEL-6, tetapi tidak umum digunakan.

Daftar layanan:

initctl list

Memulai layanan:

initctl start {SERVICENAME}

Hentikan layanan:

initctl stop {SERVICENAME}

Aktifkan layanan:

2 cara sayangnya:

  1. Akan ada file /etc/default/{SERVICENAME}yang berisi satu baris ENABLED=.... Ubah baris ini menjadi ENABLED=1.

  2. Akan ada file /etc/init/{SERVICENAME}.override. Pastikan itu berisi start(atau tidak ada sama sekali), tidak manual.

Nonaktifkan layanan:

echo manual > /etc/init/{SERVICENAME}.override

Catatan: Ada juga sistem init 'OpenRC' yang digunakan oleh Gentoo. Saat ini Gentoo adalah satu-satunya distro yang menggunakannya, dan tidak sedang dipertimbangkan untuk digunakan, atau didukung oleh distro lainnya. Jadi saya tidak membahas penggunaan itu (meskipun jika pendapat saya lakukan, saya bisa menambahkannya).

Patrick
sumber
OpenRC agak abstraksi untuk SysVinit. Itu tidak menggantikannya, itu menambahnya.
Spidey
Langgan hebat! Hanya beberapa koreksi kecil: RHEL 6.x (dan dengan demikian, CentOS 6.x dan turunan lainnya) menggunakan pemula, seperti Ubuntu (meskipun sebagian besar layanan masih menggunakan skrip SysV pula). Juga, saya akan menambahkan bahwa "chkconfig" (RH) dan "update-rc.d" (Debian) adalah cara "resmi" untuk menambahkan tautan ke direktori rc? .D.
rsuarez
@Rsuarez poin bagus tentang hal RHEL6. Padahal sepertinya tidak banyak yang menggunakannya. Sebagian besar sistem masih berjalan melalui SysVinit lama (17 pemula, 89 SysVinit di salah satu sistem RHEL6 saya). Dan chkconfigdan update-rc.ddisebutkan. Lihat paragraf kedua di bawah SysVinit :-)
Patrick
@Patrick menyetujui # 1; "Ups!" pada # 2 :-)
rsuarez
1
Terima kasih atas jawaban komprehensifnya, sekarang saya sudah dapat gambaran besarnya. Saat ini saya menggunakan Debian (stable terbaru), di sini di Eropa berbahasa Jerman ia memiliki rekomendasi terbaik, tapi mungkin saya akan mencoba Redhat.
Erdinc Ay
9

Distribusi yang berbeda menggunakan mekanisme yang berbeda untuk mengelola layanan. Perangkat lunak untuk mengelola layanan disebut init , setelah nama tradisional untuk proses pertama (dengan ID proses 1) yang bertugas memulai yang lain.

Debian menggunakan varian init tradisional SysVinit . Di bawah sistem ini, ada kumpulan skrip di direktori /etc/init(ini dan lokasi lain mungkin sedikit berbeda antara distribusi yang menggunakan SysVinit). Script ini tidak dipanggil secara langsung, tetapi melalui tautan simbolik di direktori /etc/rc?.d. Keberadaan dan nama tautan simbolik inilah yang menentukan kapan layanan dimulai. Untuk lebih jelasnya, baca bab init di Referensi Debian .

Lihat /etc/rc?.duntuk melihat layanan apa yang sudah ada. Huruf atau digit sebelum titik adalah runlevel; entri yang namanya dimulai Sdieksekusi dengan argumen startketika memasuki runlevel, dan entri yang namanya dimulai dengan Kdijalankan ketika meninggalkan runlevel. Urutan runlevel normal adalah: S saat boot (jadi /etc/rcS.d/S*dieksekusi), lalu 2 (jadi /etc/rc2.d/S*dieksekusi). Pada saat shutdown, /etc/rc2.d/K*dieksekusi, kemudian runlevel beralih ke 0 (atau 6 untuk reboot).

Singkatnya, jika Anda ingin membuat skrip startup untuk layanan baru:

  • Tulis skrip shell di /etc/init.d. Script ini harus menerima satu argumen yang mungkin start, stop, force-reload, restart, atau (opsional) reloadatau status. Perbedaan antara reloaddan restartapakah itu restartsetara dengan stopdiikuti oleh startsaat reloadmemuat ulang konfigurasi tanpa menghentikan apa pun (jika layanan mendukungnya); force-reloadtidak reloadjika tersedia dan restartsebaliknya. Lihat file yang ada dan Membuat skrip berjalan saat boot dengan Debian untuk contohnya.
  • Jalankan update-rc.duntuk membuat tautan simbolis untuk memulai dan menghentikan layanan Anda. Sebagian besar layanan berjalan di runlevel 2, 3, 4 dan 5.

Perhatikan bahwa untuk memberikan akses svn, mungkin lebih mudah untuk mengatur Apache dan menggunakan protokol HTTP atau HTTPS. Ini memiliki keuntungan tambahan yaitu memungkinkan penjelajahan repositori cepat melalui browser web.

Gilles
sumber
2

Dari latar belakang tradisional unix, tidak ada yang istimewa tentang layanan. Layanan hanya proses, tetapi dengan dua pengecualian: mereka tidak membutuhkan terminal dan mereka memulai saat boot. bagaimana mereka memulai saat boot tergantung pada init (yang bisa berupa sysv init, bsd init, pemula, systemd atau yang lainnya; periksa halaman manual untuk init) dan apakah Anda menggunakan pembungkus untuk tugas atau untuk konfigurasi init. Tidak ada yang menghentikan Anda dari menjalankan layanan dari terminal, pada kenyataannya itu umum untuk tujuan pengujian.

Hildred
sumber