Apakah ada cara standar untuk memulai dan menghentikan layanan di Linux?

15

Sampai saat ini ada cara sederhana dan efektif untuk memulai / menghentikan / memulai kembali layanan:

service nginx start|stop|restart

Ini bekerja dengan sempurna selama bertahun-tahun, ... sampai beberapa smart-pants memutuskan untuk memperbaikinya dan sekarang saya berhadapan dengan sistem Debian / Ubuntu di mana serviceskrip tidak melakukan apa-apa (karena saya seharusnya menggunakan hal-hal seperti systemctl start nginx.service(lebih lama lagi, tidak ada pelengkapan otomatis yang berfungsi, ...)

Pertanyaan saya merujuk khusus ke Debian dan Ubuntu tetapi juga akan membantu untuk mencakup distro CentOS / RedHat juga.

Jadi, adakah yang bisa menyelamatkan saya dari perubahan yang ditakdirkan ini?

Seandainya tidak jelas, saya mencari cara yang konsisten untuk menangani itu, yang akan bekerja pada Debian 7.x, 8.x, Ubuntu LTS terbaru dan non-LTS.

PS. Di luar ruang lingkup pertanyaan khusus ini, tetapi pujian ekstra diberikan jika solusinya juga mencakup bagian aktifkan dan nonaktifkan untuk layanan.

Sorin
sumber
5
Penyelesaian tab berfungsi untuk systemctl untuk saya ... Dan, suka atau tidak, systemd adalah standar de facto sekarang: mungkin juga terbiasa dengannya.
jasonwryan
1
Extra: jika perintah layanan menjadi tidak berguna, dapatkah saya menghapusnya? Paket apa yang menyediakannya?
sorin
3
Tidak masuk akal untuk mengganti serviceperintah lama dengan pembungkus yang memanggil servicectl?
Sorin
4
@jasonwryan Ya, tetapi Anda juga bisa melakukan hal itu , dan pembungkus bisa menanganinya, membuat transisi ke systemd lebih lancar bagi pengguna.
Dmitry Grigoryev
2
Apakah servicebenar-benar tidak melakukan apa pun untuk Anda? Ini berfungsi seperti yang diharapkan pada LMDE saya (yang pada dasarnya adalah pengujian Debian), saya tidak berpikir itu adalah hal khusus LMDE. Ini juga berfungsi seperti yang diharapkan di VM Ubuntu saya.
terdon

Jawaban:

6

Ada sejumlah variasi boot dan sistem kontrol layanan di seluruh platform Unix karena sejarahnya yang kusut.

Sistem service\chkconfigberbasis yang Anda temukan sederhana dan efektif umumnya disebut sebagai gaya SysVinit dan merupakan langkah besar di sepanjang jalan menuju semacam standardisasi. Anda akan menemukan gaya boot ini di RHEL / CentOS (EL) melalui rilis 6, Fedora hingga 14, dan pada distribusi berbasis Debian / Ubuntu hingga 2015. Itu bukan satu-satunya sistem boot sekitar, gaya BSD (sederhana) Sistem init masih memiliki banyak penggemar.

SysVinit bukan solusi yang sempurna (apa itu?) Dan Systemd dirancang untuk mengatasi banyak masalah; ini adalah systemctlsistem berbasis perintah yang sekarang Anda alami. Meskipun tidak disukai secara universal (orang membenci perubahan, mengasapi, dll), tidak ada keraguan bahwa itu cepat menjadi standar defacto di sebagian besar distribusi.

Oleh karena itu, melihat langsung ke depan jawaban atas pertanyaan awal Anda adalah:
Cara standar untuk mengontrol layanan di sebagian besar distribusi Linux sekarang systemctl!
Berapa lama ini akan berlaku adalah dugaan siapa pun; mungkin hanya sampai ada sesuatu yang lebih baik dan diadopsi secara luas.

Saya yakin akan ada pembungkus yang tersedia untuk memungkinkan, favorit Anda saat ini, service/chkconfigperintah untuk terus melakukan sebagian besar hal-hal yang waras, tetapi dengan kurva pembelajaran khusus ini mungkin lebih baik untuk tidak melawannya. Mungkin melihat ke depan, untuk sementara waktu juga akan ada systemctlpembungkus untuk sistem yang lebih tua, untuk membuat pengelolaannya berdampingan dengan yang saat ini tidak terlalu merepotkan;)

DanSut
sumber
Dan sebelum ini adalah xinetd, dan sebelum itu adalah inetd
jas-
@ jas- Saya pikir inetd benar-benar layanan itu sendiri, saya percaya mereka bisa ada di semua sistem boot. Mereka adalah jenis layanan khusus karena mereka memberikan alternatif bagi beberapa layanan lain untuk berjalan sebagai layanan penuh, dengan menyediakan mereka sesuai permintaan . Saya mengerti dari mana Anda berasal dalam konteks Q ini, hanya cara lain untuk memulai layanan.
DanSut
Di semua distribusi; gentoo, centos, redhat, debian, ubuntu dll., xinetd dan sebelumnya inetd terdiri dari skrip shell kecil untuk memulai, menghentikan & memuat ulang konfigurasi untuk berbagai layanan, tetapi ya Anda benar mereka memang layanan seperti systemd.
jas-
Ubuntu menggunakan pemula sejak 6.10 dan Fedora sejak 9 (sampai mereka diganti oleh systemd) upstart.ubuntu.com , dan dimungkinkan untuk mengalihkan Debian dari sysvinit selama beberapa tahun ...
James Tocknell
5

Bukankah masuk akal untuk mengganti serviceperintah lama dengan pembungkus yang memanggil servicectl[sic]?

Ya, tapi [...] pembungkus bisa menanganinya, membuat transisi ke systemd lebih lancar bagi pengguna.

... yang, seperti yang orang lain katakan dalam komentar, apa yang telah dilakukan sejak lama .

The /usr/sbin/serviceperintah pada Debian 8 adalah bagian dari paket sysvinit-utils. Sudah ada sejak 2009. Ini adalah tambahan RedHat yang berasal dari Debian khusus untuk paket sumber sysvinit asli, dan seperti dapat dilihat dari membaca skrip, ia mengenali kedua systemd running dan keberadaan pekerjaan pemula, memberikan perintah kepada systemctldan initctl( melalui alias-nya) masing-masing. Ini sudah dilakukan sejak 2013.

service name actioncukup banyak tersedia bahkan pada sistem operasi non-Linux. Ia bahkan akan bekerja pada sebagian besar BSD, karena mereka juga memiliki serviceperintah sendiri . Ada juga serviceperintah shim dalam paket nosh yang diterjemahkan menjadi . Tapi ...system-control action name

  • ... melampaui subset umum ini, dan ada jauh lebih sedikit kompatibilitas di sekitar.
  • ... OpenBSD tidak memiliki serviceperintah.
  • ... serviceperintah BSD memiliki masalah yang sudah lama diketahui bahwa administrator sistem telah menceritakan kisah perang selama beberapa dekade.

Mengaktifkan dan menonaktifkan layanan adalah situasi yang serupa. Meskipun SuSE chkconfigProgram (tersedia dikemas untuk Debian dan Ubuntu) sangat berbeda dengan Fedora satu (mereka yang ditulis dalam bahasa pemrograman yang sama sekali berbeda, bahkan - satu dikompilasi, satu ditafsirkan), ada minimal umum sintaks, dengan tindakan yang atau . Tapi ...chkconfig name actiononoff

  • ... sekali lagi, di luar subset umum ini ada kurang kompatibilitas.
  • ... tidak ada chkconfigpada BSD, karena alat konvensional untuk ini adalah sysrcOpenBSD atau yang lebih baru rcctl enabledan rcctl disable. Ada chkconfigdan rcctlshims dalam paket nosh yang diterjemahkan ke dan .system-control enable namesystem-control disable name
  • ... hanya Fedora yang chkconfigtahu tentang systemd dan bertindak sebagai shim untuk systemctl enabledan systemctl disable. SuSE chkconfigtidak memiliki pengetahuan tentang sistemd.

Bacaan lebih lanjut

JdeBP
sumber
2

Tidak ada cara standar untuk memulai dan menghentikan layanan di Linux.

Adakah sesuatu yang bisa menyelamatkan saya dari perubahan yang terkutuk ini?

Cobalah alat manajemen konfigurasi / orkestrasi: Ansible , Chef , Saltstack , Puppet atau apa pun.

Anda dapat memulai dan mengaktifkan layanan dengan Ansible:

ansible all -i inv -m service -a 'name=service-name state=started enabled=true'

Lihatlah kelas LinuxService di servicemodul Ansible's :

Ini adalah kelas manipulasi Layanan Linux - saat ini mendukung campuran binari dan skrip init untuk mengendalikan layanan yang dimulai saat boot, serta untuk mengendalikan keadaan saat ini.

Evgeny Vereshchagin
sumber
Entah bagaimana tampaknya orang-orang Ubuntu mampu menjaga skrip layanan berfungsi setelah beralih ke systemd. Melihat ke dalamnya tampaknya cukup pintar untuk menggunakan backend kanan. Tidak bisa mengatakan hal yang sama tentang Debian.
sorin
1

Masalah Anda adalah bahwa Debian / Ubuntu telah beralih ke yang baru systemdsebagai pengganti yang lama sysvinit. Tanyakan yang mana yang lebih baik dan Anda akan memulai perang api, tetapi Anda dapat beralih kembali ke yang lama sysvinit, periksa ini jika Anda ingin kembali.

YoMismo
sumber