Tampaknya systemd adalah sistem init baru panas di blok, sama seperti Upstart beberapa tahun yang lalu. Apa pro / kontra untuk masing-masing? Juga, bagaimana masing-masing dibandingkan dengan sistem init lainnya?
@keith iirc openrc hanya menggunakan SysV, keunggulannya adalah kumpulan skrip startup yang dirancang dengan baik yang menggunakan komponen umum dan portabel (artinya dapat digunakan pada shell apa pun) Ini pembersihan yang bagus, tetapi bukan initd baru
xenoterracide
@ xeno Memang, tapi Anda tidak bisa mengatakannya. tidak ada symlink rcX.d atau [KS] sama sekali. Sebenarnya sysv init itu sendiri cukup fleksibel, dan runlevel tidak benar-benar digunakan dengan cara biasa.
Keith
Meskipun penulis blog ini menentang systemd, saya sarankan agar ini dibaca. Ini membahas pro dan kontra dari systemd dan BSD init. textplain.net/blog/2015/…
Setiap keuntungan yang disengaja dari systemd tidak akan dalam 100 tahun mengimbangi biaya yang sudah dikeluarkan untuk dunia untuk mengimplementasikan ini. Setiap menit atau jam atau hari yang dihabiskan oleh admin Unix untuk menangani sampah ini harus sudah mencapai miliaran dan untuk manfaat nyata apa selain beberapa lonceng dan peluit?
Waslap
Jawaban:
90
Pembaruan 2016
Sebagian besar jawaban di sini berusia lima tahun sehingga sudah waktunya untuk beberapa pembaruan.
Ubuntu digunakan untuk menggunakan pemula baru secara default tetapi mereka meninggalkannya tahun lalu demi systemd - lihat:
Karena itu ada artikel bagus Systemd untuk Pengguna Baru di Ubuntu wiki - perbandingan yang sangat terperinci antara pemula dan systemd dan panduan transisi dari pemula ke systemd.
(Perhatikan bahwa menurut wiki Ubuntu Anda masih dapat menjalankan pemula pada versi saat ini dari Ubuntu secara default dengan menginstal upstart-sysvdan menjalankan sudo update-initramfs -utetapi mempertimbangkan ruang lingkup proyek systemd saya tidak tahu cara kerjanya dalam praktik, atau apakah systemd atau tidak mungkin untuk dihapus.)
Sebagian besar info di bagian Perintah dan Skrip di bawah ini diadaptasi dari beberapa contoh yang digunakan dalam artikel itu (yang dilisensikan dengan mudah seperti kontribusi pengguna Stack Exchange di bawah Lisensi Creative Commons Attribution-ShareAlike 3.0 ).
Berikut ini adalah perbandingan cepat dari perintah umum dan skrip sederhana, lihat bagian di bawah ini untuk penjelasan terperinci. Jawaban ini membandingkan perilaku lama sistem berbasis pemula dengan perilaku baru sistem berbasis systemd, seperti yang ditanyakan dalam pertanyaan, tetapi perhatikan bahwa perintah yang ditandai sebagai "pemula" tidak selalu khusus-pemula - mereka sering perintah yang adalah umum untuk setiap sistem Linux dan Unix non-system.
Perintah
Running su:
pemula:su
systemd:machinectl shell
(lihat bagian "penggantian perintah su" di bawah)
Layar lari:
pemula:screen
systemd:systemd-run --user --scope screen
(lihat bagian "Pembunuhan proses latar belakang yang tidak terduga" di bawah)
Menjalankan tmux:
pemula:tmux
systemd:systemd-run --user --scope tmux
(lihat bagian "Pembunuhan proses latar belakang yang tidak terduga" di bawah)
Dalam systemd log disimpan dalam format biner internal (bukan sebagai file teks) sehingga Anda perlu menggunakan journalctlperintah untuk mengaksesnya:
sudo journalctl -u foo
sudo journalctl -u foo -f
Skrip
Contoh skrip pemula yang ditulis dalam /etc/init/foo.conf:
description "Job that runs the foo daemon"
start on runlevel [2345]
stop on runlevel [016]
env statedir=/var/cache/foo
pre-start exec mkdir -p $statedir
exec /usr/bin/foo-daemon --arg1 "hello world" --statedir $statedir
Contoh skrip systemd ditulis dalam /lib/systemd/system/foo.service:
"Yah, sudah ada diskusi panjang tentang ini, tetapi masalahnya adalah apa yang seharusnya dilakukan su sangat tidak jelas. [...] Singkat cerita: su benar-benar konsep yang rusak. Ini akan memberi Anda semacam shell , dan tidak apa-apa menggunakannya untuk itu, tapi itu bukan login penuh, dan tidak boleh salah dengan itu. " - Lennart Poettering
tidak lagi berfungsi seperti yang diharapkan . Misalnya, nohupadalah perintah POSIX untuk memastikan bahwa proses terus berjalan setelah Anda keluar dari sesi Anda. Tidak lagi berfungsi pada systemd. Juga program-program seperti screendan tmuxperlu dipanggil dengan cara khusus atau jika tidak , proses yang Anda jalankan dengan mereka akan terbunuh (sementara proses-proses tersebut tidak terbunuh biasanya merupakan alasan utama menjalankan layar atau tmux di tempat pertama).
Ini bukan kesalahan, itu adalah keputusan yang disengaja, sehingga tidak mungkin diperbaiki di masa depan. Ini adalah apa yang Lennart Poettering mengatakan tentang masalah ini:
Dalam pandangan saya itu sebenarnya cukup aneh dari UNIX bahwa secara default biarkan kode pengguna yang sewenang-wenang tetap tidak dibatasi setelah keluar. Sudah dibahas sejak lama di antara banyak orang OS, bahwa ini seharusnya mungkin tetapi tentu saja bukan default, tetapi tidak ada yang berani sejauh ini untuk membalik saklar untuk mengubahnya dari default ke opsi. Tidak membersihkan sesi pengguna setelah logout tidak hanya jelek dan agak meretas tetapi juga masalah keamanan. systemd 230 sekarang akhirnya membalik saklar dan akhirnya secara default membersihkan semuanya dengan benar ketika pengguna logout.
Dengan cara systemd bekerja mundur - dalam pekerjaan pemula mulai segera setelah mereka bisa dan dalam pekerjaan systemd mulai ketika mereka harus. Pada akhirnya, pekerjaan yang sama dapat dimulai oleh kedua sistem dan dalam urutan yang hampir sama, tetapi Anda memikirkannya dengan melihat dari arah yang berlawanan.
Upstart Model 's untuk memulai proses (pekerjaan) adalah 'serakah acara berbasis', pekerjaan yaitu semua tersedia yang startup peristiwa terjadi dimulai sedini mungkin. Selama boot, pemula mulai mensintesis beberapa peristiwa awal seperti startup atau rcS sebagai "root pohon", layanan awal dimulai, dan layanan kemudian mulai ketika yang pertama berjalan. Pekerjaan baru hanya perlu menginstal file konfigurasinya ke / etc / init / untuk menjadi aktif.
model systemd untuk memulai proses (unit) adalah "berbasis ketergantungan malas", yaitu sebuah unit hanya akan mulai jika dan ketika beberapa unit awal lainnya bergantung padanya. Selama boot, systemd memulai "root unit" (default.target, dapat ditimpa di grub), yang kemudian diperluas secara transparan dan memulai dependensinya. Unit baru perlu menambahkan dirinya sebagai ketergantungan dari unit dari urutan boot (biasanya multi-user.target) agar menjadi aktif.
Penggunaan dalam distribusi
Sekarang beberapa data terbaru menurut Wikipedia:
Distribusi menggunakan pemula baru secara default:
Devuan (garpu Debian dibuat yang dihasilkan dari kontroversi systemd di komunitas Debian yang menyebabkan pengunduran diri Ian Jackson ) - secara khusus mempromosikan Init Freedom dengan sistem init berikut ini yang dipertimbangkan untuk dimasukkan: sinit , OpenRC , runit , s6 dan gembala .
Void Linux - menggunakan runit sebagai sistem init dan pengawas layanan
Seperti yang mungkin sudah Anda ketahui, suara Debit GR Init yang dipromosikan oleh Ian Jackson tidak berguna untuk melindungi warisan Debian dan penggunanya dari longsoran systemd.
Situasi ini prospek kunci dalam dependensi systemd yang secara de facto mengancam kebebasan pembangunan dan memiliki konsekuensi serius bagi Debian, hulu dan hilirnya.
CTTE berhasil menukar ketergantungan dan memberi kami waktu lebih banyak daripada pemasangan halus systemd daripada sysvinit, tetapi bahkan proses ini melelahkan dan penuh drama. Akhirnya, seminggu yang lalu, Ian Jackson mengundurkan diri. [...]
Saya mengundurkan diri dari Komite Teknis dengan efek langsung.
Meskipun penting bahwa pandangan 30-40% dari proyek yang setuju dengan saya harus terus diwakili dalam TC, saya sendiri jelas terlalu kontroversial pada saat ini. Saya harus minggir untuk mencoba mengurangi sejauh mana percakapan tentang tata kelola proyek dipersonalisasi. [...]
Devuan lahir dari kontroversi atas keputusan untuk menggunakan sebagai sistem init default untuk Debian. The posisi resmi Debian pada systemd penuh klaim yang lain telah debunked . Pembaca yang tertarik dapat terus membahas topik hangat ini dalam kontroversi The systemd . Namun kami mendorong Anda untuk tetap tenang dan suara Anda sopan. Di Devuan kami lebih tertarik memprogram kesalahan mereka daripada melihat ke belakang. [...]
Beberapa situs web dan artikel yang didedikasikan untuk kontroversi systemd telah dibuat:
pemula mengikuti filosofi Unix dari DOTADIW - "Do One Thing and Do It Well." Ini adalah pengganti daemon init tradisional. Itu tidak melakukan apa pun selain memulai dan menghentikan layanan. Tugas-tugas lain didelegasikan ke subsistem khusus lainnya.
systemd melakukan lebih dari itu. Selain memulai dan menghentikan layanan, ia juga mengelola kata sandi, login, terminal, manajemen daya, pengaturan ulang pabrik, pemrosesan log, titik pemasangan sistem file, jaringan dan banyak lagi - lihat file BERITA untuk beberapa fitur.
Mengubah Linux dari sekumpulan bit menjadi Sistem Operasi Tujuan Umum yang kompetitif.
Membangun OS Generasi Berikutnya Internet. Memersatukan perbedaan yang tidak ada artinya antara distribusi
Membawa inovasi kembali ke OS inti
Desktop, Server, Wadah, Tertanam, Mobile, Cloud, Cluster,. . . Area-area ini lebih dekat daripada yang Anda kira
Mengurangi kompleksitas administrator, keandalan tanpa pengawasan
Segalanya bisa ditinjau
Penemuan otomatis, plug and play adalah kuncinya
Kami memperbaiki hal-hal di mana mereka rusak, tidak pernah menempel padanya
Area yang sudah dicakup:
Apa yang sudah kita bahas:
sistem init, jurnal logging, manajemen login, manajemen perangkat, manajemen file sementara dan volatile, registrasi format biner, penyimpanan / pengembalian cahaya latar, penyimpanan / pengembalian rfkill, bootchart, readahead, pengaturan penyimpanan terenkripsi, penemuan partisi EFI / GPT, mesin / wadah virtual pendaftaran, manajemen wadah minimal, manajemen hostname, manajemen lokal, manajemen waktu, manajemen benih acak, manajemen variabel sysctl, manajemen konsol,. . .
Pekerjaan dalam proses:
Apa yang sedang kami kerjakan:
manajemen jaringan
systemd-networkd
Tembolok DNS lokal, penjawab mDNS, penjawab LLMNR, verifikasi DNSSEC
IPC di kernel
kdbus, sd-bus
Sinkronisasi waktu dengan NTP
systemd-timesyncd
Lebih banyak integrasi dengan wadah
Layanan Pengamplasan
Sandboxing Aplikasi
Format Gambar OS
Format gambar wadah
Format gambar aplikasi
GPT dengan penemuan otomatis
Sistem tanpa kewarganegaraan, sistem instantiatable, reset pabrik
/ usr adalah OS
/ etc adalah konfigurasi (opsional)
/ var adalah status (opsional)
Inisialisasi dan pembaruan simpul atom
Integrasi dengan cloud
Manajemen layanan lintas node
Gambar OS yang dapat diverifikasi
Semua jalan ke firmware
Boot Sedang Memuat
Lingkup jawaban ini
Seperti dicatat fpmurphy1 dalam komentar, "Harus ditunjukkan bahwa systemd telah memperluas cakupan kerjanya selama bertahun-tahun jauh lebih dari sekadar startup sistem."
Saya mencoba memasukkan sebagian besar info yang relevan di sini. Di sini saya membandingkan fitur umum dari Upstart dan systemd ketika digunakan sebagai sistem init seperti yang ditanyakan dalam pertanyaan dan saya hanya menyebutkan fitur systemd yang melampaui ruang lingkup sistem init karena itu tidak dapat dibandingkan dengan Startup, tetapi keberadaannya penting untuk memahami perbedaan antara kedua proyek tersebut. Dokumentasi yang relevan harus diperiksa untuk informasi lebih lanjut.
... dan garpu Debian telah terjadi. Devuan GNU + Linux adalah garpu Debian tanpa systemd.
fpmurphy
2
Harus ditunjukkan bahwa systemd telah memperluas ruang lingkup kerjanya selama bertahun-tahun lebih dari sekadar startup sistem.
fpmurphy
1
Pos luar biasa dan sangat membantu bagi pria Cent. Terima kasih telah meluangkan waktu, Pak !!!
origin1tech
4
@ elektronmith service <foo> start/stop/restart/statusmasih berfungsi dengan baik. Seperti kebanyakan perangkat lunak unix, systemd menyediakan kompatibilitas perintah dengan standar yang sudah diketahui.
Shadur
2
Jawaban yang sangat bagus Namun satu poin: sistem operasi BSD bukan distribusi Linux: mereka adalah sistem operasi Unix yang berbeda dengan kernelnya sendiri.
Giorgio
68
Baik pemula dan systemd adalah upaya untuk memecahkan beberapa masalah dengan keterbatasan sistem init SysV tradisional. Sebagai contoh, beberapa layanan harus memulai setelah layanan lain (misalnya, Anda tidak dapat me-mount sistem file NFS sampai jaringan berjalan), tetapi satu-satunya cara di SysV untuk mengatasinya adalah dengan mengatur tautan di direktori rc # .d sedemikian rupa sehingga yang satu di depan yang lain. Tambahkan itu, Anda mungkin perlu memberi nomor ulang semuanya nanti ketika dependensi ditambahkan atau diubah. Pemula dan Systemd memiliki pengaturan yang lebih cerdas untuk mendefinisikan persyaratan. Juga, ada masalah dengan fakta bahwa semuanya adalah semacam skrip shell, dan tidak semua orang menulis skrip init terbaik. Itu juga berdampak pada kecepatan startup.
Beberapa kelebihan systemd yang bisa saya lihat:
Setiap proses yang dimulai mendapatkan cgroup sendiri atau cgroup tertentu.
Pra-pembuatan soket dan pegangan file untuk layanan, mirip dengan bagaimana xinetd melakukannya untuk layanannya, memungkinkan layanan yang bergantung untuk memulai lebih cepat. Sebagai contoh, systemd akan membuka filehandle untuk / dev / log untuk syslog, dan layanan selanjutnya yang mengirim ke / dev / log akan memiliki pesan mereka buffered sampai syslogd siap untuk mengambil alih.
Lebih sedikit proses berjalan untuk benar-benar memulai layanan. Ini berarti Anda tidak menulis skrip shell untuk memulai layanan Anda. Ini bisa menjadi peningkatan kecepatan, dan (IMO) sesuatu yang lebih mudah diatur di tempat pertama.
Satu kekurangan yang saya tahu adalah bahwa untuk mengambil keuntungan dari preallokasi socket / FH systemd, banyak daemon harus ditambal agar FH diteruskan kepada mereka oleh systemd.
PulseAudio adalah sistem suara yang banyak difitnah ( pulseaudio.org ), awalnya ditulis oleh Lennart Poettering, penulis systemd. Saya sebagian besar membuat lelucon di sini, karena saya tahu beberapa orang yang suka mengeluh tentang pulseaudio dan saya yakin mereka akan mengeluh tentang systemd juga. Jujur, saya tidak punya masalah dengan systemd atau pulseaudio.
jsbillings
4
Membuat satu hampir pinus untuk banyak rencana Plan9 ... semuanya file.
dhchdhd
4
Sejujurnya, pulseaudio adalah solusi untuk masalah yang tidak ada. Tidak ada yang dapat dilakukan PA yang tidak dapat dilakukan ALSA, dan saya telah mendengar BANYAK orang yang mengalami masalah dengan PA, berulang kali.
WhyNotHugo
3
Dua kelemahan systemd yang Anda lewatkan: (1) semua skrip startup harus ditulis ulang. (2) ada kompatibilitas yang jauh lebih sedikit dengan OS non-linux (seperti BSD, misalnya).
WhyNotHugo
8
Bagus sekali. Silakan lihat di 0pointer.de/blog/projects/the-biggest-myths . Saya menyaksikan pertumbuhan systemd, dan dapat membuktikan bahwa banyak kritik yang diberikan di sini sama sekali tidak berdasar. Pada tautan Anda akan menemukan pukulan demi pukulan, bantahan beralasan .
vonbrand
30
Saw systemddisebutkan di Arch General ML hari ini. Jadi bacalah tentang itu. H Online seperti biasa adalah sumber yang bagus untuk Teknologi Linux dan di sinilah saya menemukan tempat saya untuk mulai meneliti Systemd sebagai alternatif SysV Init dan Pemula . Namun artikel H Online (dalam hal ini) bukan merupakan bacaan yang sangat berguna, penggunaan sebenarnya di balik itu adalah memberikan tautan ke bacaan yang bermanfaat.
Jawaban sebenarnya ada di pengumuman systemd . Yang memberikan beberapa poin penting tentang apa yang salah dengan SysV initd, dan apa yang perlu dilakukan sistem baru
Untuk memulai lebih sedikit.
Dan untuk memulai lebih banyak secara paralel.
Rencana utamanya untuk memulai ini adalah memulai layanan hanya sesuai kebutuhan, dan memulai soket untuk layanan itu, sehingga layanan yang memerlukannya dapat terhubung ke soket yang dibuat jauh sebelum daemon sepenuhnya online. Rupanya sebuah socket akan menyimpan sejumlah kecil data buffer yang berarti bahwa tidak ada data yang hilang selama lag, itu akan ditangani segera setelah daemon online.
Bagian lain dari rencana ini tampaknya bukan membuat sistem file berseri, tetapi me-mount-kan mereka yang diminta juga, dengan cara itu Anda tidak menunggu Anda /home/, dll (jangan dikacaukan dengan /etc) untuk melakukan mount, dan / atau fsckketika Anda bisa mulai daemon sebagai /dan /var/lain - lain, sudah terpasang. Dikatakan akan menggunakan autofs untuk tujuan ini.
Ini juga memiliki tujuan untuk menciptakan .desktopdeskriptor init gaya sebagai pengganti skrip. Ini akan mencegah banyak shproses lambat dan bahkan lebih banyak proses dari hal-hal seperti seddan grepyang sering digunakan dalam skrip shell.
Mereka juga berencana untuk tidak memulai beberapa layanan sampai diminta, dan mungkin bahkan mematikannya jika tidak diperlukan lagi, modul bluetooth, dan daemon hanya diperlukan saat Anda menggunakan perangkat bluetooth misalnya. Contoh lain yang diberikan adalah daemon ssh. Ini adalah jenis hal yang mampu dilakukan inetd. Secara pribadi saya tidak yakin saya suka ini, karena itu mungkin berarti latensi ketika saya membutuhkannya, dan dalam kasus ssh saya pikir itu berarti kerentanan keamanan yang mungkin, jika inetd saya dikompromikan, seluruh sistem akan menjadi. Namun, saya telah diberitahu bahwa menggunakan ini untuk melanggar sistem ini tidak mungkin dan bahwa jika saya ingin, saya dapat menonaktifkan fitur ini per layanan dan dengan cara lain.
Fitur lain tampaknya akan menjadi kemampuan untuk memulai berdasarkan peristiwa waktu, baik pada interval yang dijadwalkan secara teratur atau pada waktu tertentu. Ini mirip dengan apa cronddan atdlakukan sekarang. Meskipun saya diberitahu itu tidak akan mendukung pengguna "cron". Secara pribadi ini terdengar seperti hal yang paling tidak berguna. Saya pikir ini ditulis / dipikirkan oleh orang-orang yang tidak bekerja di lingkungan multiuser, tidak ada banyak tujuan untuk pengguna cron jika Anda satu-satunya pengguna pada sistem, selain tidak berjalan sebagai root. Saya bekerja pada sistem multiuser setiap hari, dan aturannya selalu menjalankan skrip pengguna sebagai pengguna. Tapi mungkin saya tidak memiliki pandangan ke depan yang mereka lakukan, dan itu tidak akan berhasil sehingga saya tidak dapat menjalankan crondatau atd, jadi itu tidak menyakiti siapa pun kecuali pengembang saya kira.
Kerugian besar dari systemd adalah bahwa beberapa daemon harus dimodifikasi untuk memanfaatkannya sepenuhnya. Mereka akan bekerja sekarang, tetapi mereka akan bekerja lebih baik jika mereka ditulis khusus untuk model soketnya.
Tampaknya sebagian besar masalah orang-orang systemd dengan pemula adalah sistem acara, dan mereka percaya itu tidak masuk akal atau tidak perlu. Mungkin kata-kata mereka yang terbaik.
Atau untuk membuatnya lebih sederhana: fakta bahwa pengguna baru saja memulai D-Bus sama sekali bukan indikasi bahwa NetworkManager juga harus dimulai (tetapi inilah yang akan dilakukan oleh pemula). Itu benar sebaliknya: ketika pengguna meminta NetworkManager, itu pasti indikasi bahwa D-Bus juga harus dimulai (yang tentunya apa yang diharapkan sebagian besar pengguna, kan?).
Sistem init yang baik harus memulai hanya apa yang dibutuhkan, dan sesuai permintaan. Baik malas atau paralel dan di muka. Namun itu tidak boleh dimulai lebih dari yang diperlukan, terutama tidak semua yang diinstal yang dapat menggunakan layanan itu.
Seperti yang sudah saya katakan ini dibahas jauh lebih komprehensif dalam pengumuman systemd .
maaf tapi pengumumannya seperti buku. Saya harus membaca dan grok, sebelum saya benar-benar bisa memasukkan lebih banyak di sini.
xenoterracide
2
Bagaimana ini lebih baik dari jawaban @ John? Apakah ini pengganti? Promo H Online ?
tshepang
1
@tshepang juga sebenarnya terhubung ke pengumuman sistem d dan hal-hal online memiliki tautan ke sana dan tautan menarik lainnya. itu bacaan yang panjang dan membosankan. Saya mungkin menambahkan lebih banyak setelah saya menggosoknya ... ini bukan subjek yang sederhana . ketika saya menulis ini, saya pikir Anda mungkin ingin mulai membaca lebih cepat daripada nanti. tapi jangan ragu untuk mengubah saya. jawaban pasti @ jsbillings layak, dan lebih baik dari saya sejauh ini. tetapi tidak sebagus membaca pengumuman itu sendiri
xenoterracide
@tepang, saya mungkin akan menambahkan lebih banyak besok, setelah tidur. h hal-hal online hanya saya menjadi jurnalis yang baik dan mengutip sumber saya.
xenoterracide
@tepang. Saya telah memperbarui jawaban saya. cukup yakin saya sudah selesai kecuali orang-orang yang membantu di irc: //frenode.net/systemd memutuskan mereka ingin menawarkan semacam koreksi.
xenoterracide
11
Nah satu hal yang sebagian besar dari Anda lupa adalah organisasi proses dalam cgroup .
Jadi jika systemd memulai sesuatu, itu akan menempatkan hal ini dalam kelompok sendiri dan tidak ada (tidak terselamatkan) berarti bagi proses untuk melarikan diri kelompok itu. Inilah konsekuensi dari itu:
Administrator sistem besar dengan banyak pengguna memiliki cara baru yang efisien untuk mengidentifikasi pengguna / proses jahat.
Prioritas untuk penjadwalan CPU dapat ditentukan lebih baik seperti yang dilakukan oleh "Wonder autocgroup patch" .
Untuk tampilan yang sangat terperinci pada systemd, dimulai dengan draf desain pertama (dan kritik terperinci tentang sistem init yang ada, termasuk pemula, dan bagaimana systemd mengusulkan untuk memperbaikinya), buka beranda . Seiring waktu, ada beberapa artikel tentang startup yang diterbitkan di LWN . Harap diperhatikan bahwa penyebutan systemd (atau pulseaudio) di sana memicu flamewar yang tidak pernah berakhir.
IMVHO (dan sebagai pengguna Fedora) saya sangat senang dengannya. Sesuatu di baris ini sudah lama tertunda untuk menangani kompleksitas sistem Linux saat ini. Fedora menggunakan pemula baru untuk sementara waktu, tetapi tidak pernah keluar dari tahap menjadi pengganti mewah untuk sysvinit, menjalankan skrip init sebagian besar tidak berubah. Janji untuk menyederhanakan konfigurasi boot dikenakan biaya lagisecara manual mengatur saling ketergantungan, dan itu tidak berfungsi. angka-angka systemd dependecies dengan sendirinya (atau hanya memungkinkan hal-hal mulai tanpa memperhatikan dependensi, mereka memilah diri mereka sendiri). Keuntungan besar lainnya (ada yang mengatakan itu adalah kerugian yang parah) adalah bahwa ia mengeksploitasi fitur spesifik Linux ke gagangnya (terutama cgroup memungkinkan mengisolasi daemon dan semua turunannya, sehingga mudah untuk memantau, membatasi sumber daya, atau membunuh mereka sebagai sebuah kelompok; ada banyak lainnya).
Penjurnalan - Systemd secara harfiah seperti folder WinSXS ketika datang ke hal-hal logging, itu menciptakan salinan salinan kecuali jika Anda secara manual menghapus atau mengurangi ukuran file itu akan terus menggerogoti drive Anda. Saya menyebutnya boot loader cookie.
Jawaban:
Pembaruan 2016
Sebagian besar jawaban di sini berusia lima tahun sehingga sudah waktunya untuk beberapa pembaruan.
Ubuntu digunakan untuk menggunakan pemula baru secara default tetapi mereka meninggalkannya tahun lalu demi systemd - lihat:
Karena itu ada artikel bagus Systemd untuk Pengguna Baru di Ubuntu wiki - perbandingan yang sangat terperinci antara pemula dan systemd dan panduan transisi dari pemula ke systemd.
(Perhatikan bahwa menurut wiki Ubuntu Anda masih dapat menjalankan pemula pada versi saat ini dari Ubuntu secara default dengan menginstal
upstart-sysv
dan menjalankansudo update-initramfs -u
tetapi mempertimbangkan ruang lingkup proyek systemd saya tidak tahu cara kerjanya dalam praktik, atau apakah systemd atau tidak mungkin untuk dihapus.)Sebagian besar info di bagian Perintah dan Skrip di bawah ini diadaptasi dari beberapa contoh yang digunakan dalam artikel itu (yang dilisensikan dengan mudah seperti kontribusi pengguna Stack Exchange di bawah Lisensi Creative Commons Attribution-ShareAlike 3.0 ).
Berikut ini adalah perbandingan cepat dari perintah umum dan skrip sederhana, lihat bagian di bawah ini untuk penjelasan terperinci. Jawaban ini membandingkan perilaku lama sistem berbasis pemula dengan perilaku baru sistem berbasis systemd, seperti yang ditanyakan dalam pertanyaan, tetapi perhatikan bahwa perintah yang ditandai sebagai "pemula" tidak selalu khusus-pemula - mereka sering perintah yang adalah umum untuk setiap sistem Linux dan Unix non-system.
Perintah
Running su:
su
machinectl shell
(lihat bagian "penggantian perintah su" di bawah)
Layar lari:
screen
systemd-run --user --scope screen
(lihat bagian "Pembunuhan proses latar belakang yang tidak terduga" di bawah)
Menjalankan tmux:
tmux
systemd-run --user --scope tmux
(lihat bagian "Pembunuhan proses latar belakang yang tidak terduga" di bawah)
Memulai pekerjaan foo:
start foo
systemctl start foo
Menghentikan pekerjaan:
stop foo
systemctl stop foo
Mulai ulang pekerjaan foo:
restart foo
systemctl restart foo
Daftar pekerjaan:
initctl list
systemctl status
Memeriksa konfigurasi job foo:
init-checkconf /etc/init/foo.conf
systemd-analyze verify /lib/systemd/system/foo.service
Daftar variabel lingkungan pekerjaan:
initctl list-env
systemctl show-environment
Mengatur variabel lingkungan kerja:
initctl set-env foo=bar
systemctl set-environment foo=bar
Menghapus variabel lingkungan kerja:
initctl unset-env foo
systemctl unset-environment foo
Log
Di pemula, log adalah file teks normal di direktori / var / log / pemula, sehingga Anda dapat memprosesnya seperti biasa:
Dalam systemd log disimpan dalam format biner internal (bukan sebagai file teks) sehingga Anda perlu menggunakan
journalctl
perintah untuk mengaksesnya:Skrip
Contoh skrip pemula yang ditulis dalam
/etc/init/foo.conf
:Contoh skrip systemd ditulis dalam
/lib/systemd/system/foo.service
:penggantian perintah su
Sebuah
su
pengganti perintah dilebur ke systemd di tarik permintaan # 1022:karena, menurut Lennart Poettering, "su benar-benar konsep yang rusak" .
Dia menjelaskan bahwa "Anda dapat menggunakan su dan sudo seperti sebelumnya, tetapi jangan berharap itu akan bekerja secara penuh " .
Cara resmi untuk mencapai
su
perilaku seperti sekarang adalah:Ini telah dijelaskan lebih lanjut oleh Lennart Poettering dalam diskusi untuk mengeluarkan # 825:
Lihat juga:
Pembunuhan proses latar belakang yang tidak terduga
Perintah seperti:
tidak lagi berfungsi seperti yang diharapkan . Misalnya,
nohup
adalah perintah POSIX untuk memastikan bahwa proses terus berjalan setelah Anda keluar dari sesi Anda. Tidak lagi berfungsi pada systemd. Juga program-program sepertiscreen
dantmux
perlu dipanggil dengan cara khusus atau jika tidak , proses yang Anda jalankan dengan mereka akan terbunuh (sementara proses-proses tersebut tidak terbunuh biasanya merupakan alasan utama menjalankan layar atau tmux di tempat pertama).Ini bukan kesalahan, itu adalah keputusan yang disengaja, sehingga tidak mungkin diperbaiki di masa depan. Ini adalah apa yang Lennart Poettering mengatakan tentang masalah ini:
Untuk info lebih lanjut, lihat:
Konsep startup tingkat tinggi
Dengan cara systemd bekerja mundur - dalam pekerjaan pemula mulai segera setelah mereka bisa dan dalam pekerjaan systemd mulai ketika mereka harus. Pada akhirnya, pekerjaan yang sama dapat dimulai oleh kedua sistem dan dalam urutan yang hampir sama, tetapi Anda memikirkannya dengan melihat dari arah yang berlawanan.
Berikut ini penjelasan Systemd untuk Pengguna Baru :
Penggunaan dalam distribusi
Sekarang beberapa data terbaru menurut Wikipedia:
Distribusi menggunakan pemula baru secara default:
Distribusi menggunakan systemd secara default:
(Lihat Wikipedia untuk informasi terkini)
Distribusi yang menggunakan Upstart atau systemd:
Kontroversi
Di masa lalu, garpu Debian telah diusulkan untuk menghindari systemd . The Devuan GNU + Linux diciptakan - garpu dari Debian tanpa systemd (terima kasih kepada fpmurphy1 untuk menunjuk keluar di komentar).
Untuk info lebih lanjut tentang kontroversi ini, lihat:
Posisi Debian resmi pada systemd
Kontroversi systemd
Deklarasi Debian Exodus pada 2014 :
Beberapa situs web dan artikel yang didedikasikan untuk kontroversi systemd telah dibuat:
Ada banyak diskusi menarik tentang Hacker News:
Kecenderungan serupa di distro lain dapat diamati juga:
Filsafat
pemula mengikuti filosofi Unix dari DOTADIW - "Do One Thing and Do It Well." Ini adalah pengganti daemon init tradisional. Itu tidak melakukan apa pun selain memulai dan menghentikan layanan. Tugas-tugas lain didelegasikan ke subsistem khusus lainnya.
systemd melakukan lebih dari itu. Selain memulai dan menghentikan layanan, ia juga mengelola kata sandi, login, terminal, manajemen daya, pengaturan ulang pabrik, pemrosesan log, titik pemasangan sistem file, jaringan dan banyak lagi - lihat file BERITA untuk beberapa fitur.
Paket ekspansi
Menurut Perspektif untuk systemd Apa yang Telah Dicapai, dan presentasi What Lies Ahead oleh Lennart Poettering pada tahun 2014 di GNOME.asia, berikut adalah tujuan utama dari systemd, area yang sudah dicakup dan yang masih dalam proses:
tujuan systemd:
Area yang sudah dicakup:
Pekerjaan dalam proses:
Lingkup jawaban ini
Seperti dicatat fpmurphy1 dalam komentar, "Harus ditunjukkan bahwa systemd telah memperluas cakupan kerjanya selama bertahun-tahun jauh lebih dari sekadar startup sistem."
Saya mencoba memasukkan sebagian besar info yang relevan di sini. Di sini saya membandingkan fitur umum dari Upstart dan systemd ketika digunakan sebagai sistem init seperti yang ditanyakan dalam pertanyaan dan saya hanya menyebutkan fitur systemd yang melampaui ruang lingkup sistem init karena itu tidak dapat dibandingkan dengan Startup, tetapi keberadaannya penting untuk memahami perbedaan antara kedua proyek tersebut. Dokumentasi yang relevan harus diperiksa untuk informasi lebih lanjut.
Info lebih lanjut
Info lebih lanjut dapat ditemukan di:
Ekstra
The LinOxide Tim telah menciptakan systemd vs SysV Init Linux Cheatsheet .
sumber
service <foo> start/stop/restart/status
masih berfungsi dengan baik. Seperti kebanyakan perangkat lunak unix, systemd menyediakan kompatibilitas perintah dengan standar yang sudah diketahui.Baik pemula dan systemd adalah upaya untuk memecahkan beberapa masalah dengan keterbatasan sistem init SysV tradisional. Sebagai contoh, beberapa layanan harus memulai setelah layanan lain (misalnya, Anda tidak dapat me-mount sistem file NFS sampai jaringan berjalan), tetapi satu-satunya cara di SysV untuk mengatasinya adalah dengan mengatur tautan di direktori rc # .d sedemikian rupa sehingga yang satu di depan yang lain. Tambahkan itu, Anda mungkin perlu memberi nomor ulang semuanya nanti ketika dependensi ditambahkan atau diubah. Pemula dan Systemd memiliki pengaturan yang lebih cerdas untuk mendefinisikan persyaratan. Juga, ada masalah dengan fakta bahwa semuanya adalah semacam skrip shell, dan tidak semua orang menulis skrip init terbaik. Itu juga berdampak pada kecepatan startup.
Beberapa kelebihan systemd yang bisa saya lihat:
Satu kekurangan yang saya tahu adalah bahwa untuk mengambil keuntungan dari preallokasi socket / FH systemd, banyak daemon harus ditambal agar FH diteruskan kepada mereka oleh systemd.
sumber
Saw
systemd
disebutkan di Arch General ML hari ini. Jadi bacalah tentang itu. H Online seperti biasa adalah sumber yang bagus untuk Teknologi Linux dan di sinilah saya menemukan tempat saya untuk mulai meneliti Systemd sebagai alternatif SysV Init dan Pemula . Namun artikel H Online (dalam hal ini) bukan merupakan bacaan yang sangat berguna, penggunaan sebenarnya di balik itu adalah memberikan tautan ke bacaan yang bermanfaat.Jawaban sebenarnya ada di pengumuman systemd . Yang memberikan beberapa poin penting tentang apa yang salah dengan SysV initd, dan apa yang perlu dilakukan sistem baru
Rencana utamanya untuk memulai ini adalah memulai layanan hanya sesuai kebutuhan, dan memulai soket untuk layanan itu, sehingga layanan yang memerlukannya dapat terhubung ke soket yang dibuat jauh sebelum daemon sepenuhnya online. Rupanya sebuah socket akan menyimpan sejumlah kecil data buffer yang berarti bahwa tidak ada data yang hilang selama lag, itu akan ditangani segera setelah daemon online.
Bagian lain dari rencana ini tampaknya bukan membuat sistem file berseri, tetapi me-mount-kan mereka yang diminta juga, dengan cara itu Anda tidak menunggu Anda
/home/
, dll (jangan dikacaukan dengan/etc
) untuk melakukan mount, dan / ataufsck
ketika Anda bisa mulai daemon sebagai/
dan/var/
lain - lain, sudah terpasang. Dikatakan akan menggunakan autofs untuk tujuan ini.Ini juga memiliki tujuan untuk menciptakan
.desktop
deskriptor init gaya sebagai pengganti skrip. Ini akan mencegah banyaksh
proses lambat dan bahkan lebih banyak proses dari hal-hal sepertised
dangrep
yang sering digunakan dalam skrip shell.Mereka juga berencana untuk tidak memulai beberapa layanan sampai diminta, dan mungkin bahkan mematikannya jika tidak diperlukan lagi, modul bluetooth, dan daemon hanya diperlukan saat Anda menggunakan perangkat bluetooth misalnya. Contoh lain yang diberikan adalah daemon ssh. Ini adalah jenis hal yang mampu dilakukan inetd. Secara pribadi saya tidak yakin saya suka ini, karena itu mungkin berarti latensi ketika saya membutuhkannya, dan dalam kasus ssh saya pikir itu berarti kerentanan keamanan yang mungkin, jika inetd saya dikompromikan, seluruh sistem akan menjadi. Namun, saya telah diberitahu bahwa menggunakan ini untuk melanggar sistem ini tidak mungkin dan bahwa jika saya ingin, saya dapat menonaktifkan fitur ini per layanan dan dengan cara lain.
Fitur lain tampaknya akan menjadi kemampuan untuk memulai berdasarkan peristiwa waktu, baik pada interval yang dijadwalkan secara teratur atau pada waktu tertentu. Ini mirip dengan apa
crond
danatd
lakukan sekarang. Meskipun saya diberitahu itu tidak akan mendukung pengguna "cron". Secara pribadi ini terdengar seperti hal yang paling tidak berguna. Saya pikir ini ditulis / dipikirkan oleh orang-orang yang tidak bekerja di lingkungan multiuser, tidak ada banyak tujuan untuk pengguna cron jika Anda satu-satunya pengguna pada sistem, selain tidak berjalan sebagai root. Saya bekerja pada sistem multiuser setiap hari, dan aturannya selalu menjalankan skrip pengguna sebagai pengguna. Tapi mungkin saya tidak memiliki pandangan ke depan yang mereka lakukan, dan itu tidak akan berhasil sehingga saya tidak dapat menjalankancrond
atauatd
, jadi itu tidak menyakiti siapa pun kecuali pengembang saya kira.Kerugian besar dari systemd adalah bahwa beberapa daemon harus dimodifikasi untuk memanfaatkannya sepenuhnya. Mereka akan bekerja sekarang, tetapi mereka akan bekerja lebih baik jika mereka ditulis khusus untuk model soketnya.
Tampaknya sebagian besar masalah orang-orang systemd dengan pemula adalah sistem acara, dan mereka percaya itu tidak masuk akal atau tidak perlu. Mungkin kata-kata mereka yang terbaik.
Seperti yang sudah saya katakan ini dibahas jauh lebih komprehensif dalam pengumuman systemd .
sumber
Nah satu hal yang sebagian besar dari Anda lupa adalah organisasi proses dalam cgroup .
Jadi jika systemd memulai sesuatu, itu akan menempatkan hal ini dalam kelompok sendiri dan tidak ada (tidak terselamatkan) berarti bagi proses untuk melarikan diri kelompok itu. Inilah konsekuensi dari itu:
sumber
Untuk tampilan yang sangat terperinci pada systemd, dimulai dengan draf desain pertama (dan kritik terperinci tentang sistem init yang ada, termasuk pemula, dan bagaimana systemd mengusulkan untuk memperbaikinya), buka beranda . Seiring waktu, ada beberapa artikel tentang startup yang diterbitkan di LWN . Harap diperhatikan bahwa penyebutan systemd (atau pulseaudio) di sana memicu flamewar yang tidak pernah berakhir.
IMVHO (dan sebagai pengguna Fedora) saya sangat senang dengannya. Sesuatu di baris ini sudah lama tertunda untuk menangani kompleksitas sistem Linux saat ini. Fedora menggunakan pemula baru untuk sementara waktu, tetapi tidak pernah keluar dari tahap menjadi pengganti mewah untuk sysvinit, menjalankan skrip init sebagian besar tidak berubah. Janji untuk menyederhanakan konfigurasi boot dikenakan biaya lagisecara manual mengatur saling ketergantungan, dan itu tidak berfungsi. angka-angka systemd dependecies dengan sendirinya (atau hanya memungkinkan hal-hal mulai tanpa memperhatikan dependensi, mereka memilah diri mereka sendiri). Keuntungan besar lainnya (ada yang mengatakan itu adalah kerugian yang parah) adalah bahwa ia mengeksploitasi fitur spesifik Linux ke gagangnya (terutama cgroup memungkinkan mengisolasi daemon dan semua turunannya, sehingga mudah untuk memantau, membatasi sumber daya, atau membunuh mereka sebagai sebuah kelompok; ada banyak lainnya).
sumber
Penjurnalan - Systemd secara harfiah seperti folder WinSXS ketika datang ke hal-hal logging, itu menciptakan salinan salinan kecuali jika Anda secara manual menghapus atau mengurangi ukuran file itu akan terus menggerogoti drive Anda. Saya menyebutnya boot loader cookie.
sumber