Saya baru mengenal linux dan telah menguji diri saya menggunakan contoh Amazon Lightsail (Ubuntu 16.04 LTS).
Melewati banyak panduan yang saya temui, saya melihat orang menggunakan perintah yang berbeda untuk memulai / menghentikan / memulai kembali / memuat kembali / memeriksa status suatu layanan. Khususnya ini;
sudo systemctl status apache2.service
sudo /bin/systemctl status apache2.service
sudo /etc/init.d/apache2 status
sudo service apache2 status
Semua perintah di atas berfungsi.
- Haruskah saya lebih suka satu perintah daripada yang lain?
- Jika ya lalu mengapa?
- Apakah ada perintah lain yang perlu saya waspadai?
Menggunakan init.d di Monit menyebabkan masalah ketika saya ingin menggunakan opsi status (statusnya adalah bahwa layanan offline ketika sebenarnya online - restart oleh Monit). Ubah kode dalam Monit dari inid.d menjadi / bin / systemctl memperbaikinya.
Tampaknya menggunakan init.d memberikan lebih banyak informasi tentang apa yang terjadi pada yang lain. Jika saya harus menggunakan salah satu dari perintah lain, mungkinkah mereka menampilkan lebih banyak informasi tentang apa yang dilakukan?
ubuntu@ip-172-26-12-245:~$ sudo systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /bin/systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /etc/init.d/pure-ftpd restart
[ ok ] Restarting pure-ftpd (via systemctl): pure-ftpd.service.
ubuntu@ip-172-26-12-245:~$ sudo service pure-ftpd restart
ubuntu@ip-172-26-12-245:~$
Saya ingin mengucapkan terima kasih kepada semua orang di muka yang telah meluangkan waktu untuk membaca dan membalas pertanyaan ini.
sumber
systemctl
adalah sintaks yang disukai danservice
disediakan sebagai kompatibilitas ke belakang./etc/init.d/pure-ftpd
atau sejenisnya memanggil skrip start / stop secara langsung.Jawaban:
Untuk memulainya, ada seluruh sejarah dan perjuangan antara beralih dari
SysVInit
menjadiSystemD
. Alih-alih mencoba menjabarkan semuanya dalam satu jawaban, saya akan merujuk Anda ke beberapa penjelajah google untuk detail lebih lanjut tentang sejarah serta satu artikel tertentu pada topik:http://www.tecmint.com/systemd-replaces-init-in-linux/
Singkatnya, ini merupakan transisi yang lambat dan sulit. Beberapa fitur lawas tetap utuh (seperti
init.d
beberapa derajat). Jika Anda memiliki opsi untuk digunakansystemctl
untuk kontrol layanan Anda, saya sarankan menggunakan yang itu. Ini adalah masa depan yang dapat diperkirakan untuk Linux dan pada akhirnyaSysVInit
metode yang lebih tua akan dianggap usang seluruhnya dan dihapus.Untuk mencakup setiap yang Anda daftarkan secara khusus:
sudo systemctl status apache2.service
Ini adalah
SystemD
pendekatan baru untuk menangani layanan. Ke depan, aplikasi di Linux dirancang untuk menggunakan metode systemd, bukan yang lain.sudo /bin/systemctl status apache2.service
Ini adalah hal yang sama dengan perintah sebelumnya. Satu-satunya perbedaan dalam hal ini adalah bahwa itu tidak tergantung pada
$PATH
variabel lingkungan shell untuk menemukan perintah, itu daftar perintah secara eksplisit dengan memasukkan path ke perintah.sudo /etc/init.d/apache2 status
Ini adalah
SysVInit
metode asli untuk memanggil layanan. Skrip init akan ditulis untuk layanan dan ditempatkan di direktori ini. Sementara metode ini masih digunakan oleh banyak orang,service
adalah perintah yang menggantikan metode memanggil layanan diSysVInit
. Ada beberapa fungsi peninggalan untuk ini pada sistem yang lebih baruSystemD
, tetapi sebagian besar program yang lebih baru tidak memasukkan ini, dan tidak semua skrip init aplikasi yang lebih lama bekerja dengannya.sudo service apache2 status
Ini adalah alat utama yang digunakan pada
SysVInit
sistem untuk layanan. Dalam beberapa kasus itu hanya terhubung ke/etc/init.d/
skrip, tetapi dalam kasus lain itu pergi ke skrip init yang disimpan di tempat lain. Itu dimaksudkan untuk memberikan transisi yang lebih lancar ke penanganan ketergantungan layanan.Terakhir, Anda menyebutkan ingin tahu cara mendapatkan lebih banyak informasi dari perintah, karena beberapa memberikan lebih banyak informasi daripada yang lain. Ini hampir selalu ditentukan oleh aplikasi dan bagaimana mereka mendesain file init atau layanan mereka. Sebagai aturan umum, jika diselesaikan dengan diam-diam itu berhasil. Namun, untuk memverifikasi
start
,stop
ataurestart
, Anda dapat menggunakanstatus
sub-perintah untuk melihat bagaimana hal itu dilakukan. Anda menyebutkanstatus
perintah yang salah pada skrip init lama. Itu adalah bug yang harus dilihat oleh pengembang aplikasi. Namun, karena skrip init menjadi metode penanganan layanan yang sudah usang, mereka mungkin mengabaikan bug sampai mereka menghapus opsi skrip init sepenuhnya. Itusystemctl status
harus selalu berfungsi dengan benar jika tidak bug harus dicatat dengan pengembang aplikasi.sumber
systemctl
akan mencari direktori di mana file layanan disimpan dan menambahkan ".service" untuk Anda jika menemukannya. Jadi misalnya, jika Anda menekan tab sekali setelah hanya menulissudo systemctl status apache2
itu harus melengkapinya dengan menambahkan.service
untuk Anda. Jika ada lebih dari satu file systemctl apache2 (seperti.service
dan.target
Anda harus menekan tab dua kali sehingga menunjukkan semua opsi yang tersedia.