Mengelola layanan startup dan skrip di Linux

Pada artikel ini, kita akan membahas dasar-dasar pengelolaan layanan startup dan skrip di Linux CentOS 7/8. Secara khusus, kami akan menganalisis dasar-dasar bekerja dengan iblis systemd, belajar menambahkan layanan ke startup dan menghapusnya dari sana, dan juga mempertimbangkan opsi alternatif untuk menjalankan skrip atau daemon setelah memulai sistem.

Tujuan artikel ini adalah untuk mengajarkan Anda untuk dengan cepat mengetahui daftar layanan dan skrip yang mulai secara otomatis di Linux, menambahkan layanan atau skrip Anda ke startup, atau menonaktifkan autorun program tertentu.

Konten:

  • Systemd: kontrol startup layanan di Linux
  • Script dan layanan autostart menggunakan rc.local
  • Buat daemon Anda sendiri dan tambahkan ke systemd
  • Mulai otomatis melalui cron
  • .bashrc: skrip autostart pada startup terminal

Systemd: kontrol startup layanan di Linux

Di sebagian besar distribusi Linux populer, modern, populer (CentOS 7, RHEL, Debian, Fedora, dan Ubuntu) sebagai daemon startup init.d digunakan systemd. Systemd - Manajer sistem dan layanan Linux, yang digunakan untuk memulai daemon lain dan mengelolanya selama operasi, menggunakan file unit dari / etc / systemd / system (init.d menggunakan skrip dari direktori /etc/init.d/). Systemd memungkinkan Anda untuk memparalelkan peluncuran layanan selama proses boot, sehingga mempercepat peluncuran.

Untuk mengontrol sistem, gunakan perintah systemctl.

Pertama, setelah memuat sistem, kami akan memeriksa daftar unit yang saat ini ditambahkan systemd:

systemctl daftar-unit

Daftar file unit dapat diperoleh dengan perintah:

systemctl daftar-unit-file

Perintah ini akan menampilkan semua file unit yang tersedia (terlepas dari apakah mereka dimasukkan ke dalam systemd setelah memuat OS atau tidak).

Untuk daftar layanan aktif dan statusnya, lakukan:

# systemctl list-units -t service

Perintah berikut akan mencantumkan unit yang telah mengunduh atau mencoba memuat systemd. Sejak setelah diluncurkan beberapa unit mungkin menjadi tidak aktif, menggunakan bendera -semua Anda akan mendapatkan daftar lengkap.

# systemctl daftar-unit --semua

UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount memuat menunggu aktif ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ● exim.service tidak ditemukan exim mati tidak aktif. layanan firewalld.service dimuat aktif menjalankan firewalld - daemon firewall dinamis [email protected] dimuat aktif menjalankan Getty pada tty1 ● ip6tables.service tidak-ditemukan mati ip6tables.service mati ● layanan ipset.service tidak ditemukan ipset.service mati tidak aktif ● layanan iptables. layanan tidak ditemukan iptables mati tidak aktif. layanan Membawa jaringan naik / turun ● NetworkManager-tunggu-online.layanan tidak ditemukan mati tidak aktif 

Seperti yang dapat Anda lihat dari daftar, bahkan layanan yang tidak ditemukan pada drive "tidak ditemukan" ditampilkan di sini..

Dengan menggunakan perintah ini, Anda dapat menambahkan flag lain, misalnya:

  • -negara - digunakan untuk menentukan status Load, Active, Sub daemon
  • -jenis - memungkinkan Anda untuk memfilter unit berdasarkan tipe.

Contoh:

systemctl daftar-unit --semua --state = aktif - akan mendaftar hanya unit yang aktif

systemctl list-units -type = layanan - akan menampilkan daftar unit yang merupakan layanan.

Menambahkan layanan ke systemd

Untuk mengelola layanan di systemd sintaks khusus digunakan. Setelah server nama pada akhirnya Anda harus menentukan .layanan. Sebagai contoh:

systemctl mengaktifkan nginx.service - perintah akan menambahkan server web nginx ke autoload

Perintah ini akan membuat tautan simbolis ke salinan file yang ditentukan dalam perintah layanan di direktori autorun systemd.

# systemctl aktifkan nginx.service

Dibuat symlink dari /etc/systemd/system/multi-user.target.wants/nginx.service ke /usr/lib/systemd/system/nginx.service
Output dari perintah ini menunjukkan di direktori mana symlink ke file service dibuat.

Untuk melihat layanan ini atau itu ditambahkan ke pengisian otomatis, Anda dapat memeriksa statusnya:

status sistemctl nginx.service

Saat mengeluarkan, Anda perlu memperhatikan saluran:

Dimuat: dimuat (/usr/lib/systemd/system/nginx.service; diaktifkan; preset vendor: dinonaktifkan)

Nilai yang diaktifkan berarti bahwa layanan ini dimuat secara otomatis (ditambahkan ke pengisian otomatis). Jika layanan tidak memuat secara otomatis, dinonaktifkan akan ditunjukkan di sini..

Menghapus layanan dari systemd

Anda dapat menghapus layanan dari startup sehingga tidak memulai setelah Linux dimulai (sementara layanan itu sendiri tidak dihapus dari server). Untuk menghapus layanan dari startup, jalankan perintah:

systemctl nonaktifkan service_service

Misalnya, untuk menghapus nginx dari startup, lakukan:

# systemctl nonaktifkan nginx.service

Symlink /etc/systemd/system/multi-user.target.wants/nginx.service yang dihapus

Setelah perintah dieksekusi, symlink ke file layanan akan dihapus dari direktori systemd. Anda dapat memeriksa apakah unit dalam startup:

# systemctl diaktifkan sshd

Systemd: unit masking

Dalam praktik saya, ada layanan "berbahaya" yang, setelah menghapusnya dari startup, masih tetap ada dan mulai setelah OS restart. Untuk mengatasi masalah ini, Anda dapat menutupi layanan:

systemctl mask nginx.service

Dan setelah itu, itu tidak akan mulai sama sekali, baik secara manual atau setelah me-reboot OS:

# systemctl mask nginx.service

Dibuat symlink dari /etc/systemd/system/nginx.service ke / dev / null.

# service nginx restart

Redirect ke / bin / systemctl restart nginx.service Gagal me-restart nginx.service: Unit ditutup.

Anda dapat menghapus topeng dengan perintah:

# systemctl unmask nginx.service

Symlink /etc/systemd/system/nginx.service dihapus.

Jika, setelah menutup layanan, Anda memeriksa file unit, Anda akan melihat bahwa layanan ditandai sebagai bertopeng (kondisi tertutup):

Sedemikian sederhana, Anda dapat menyelamatkan diri dari menghapus layanan, bahkan jika itu tidak dihapus dari startup systemd.

Script dan layanan autostart menggunakan rc.local

Ini paling sering digunakan untuk menjalankan berbagai skrip saat mem-boot Linux. rc.local.

Tapi selain skrip, melalui rc.local Anda juga dapat menjalankan layanan, bahkan layanan yang dijalankan systemd. Saya tidak bisa menjawab pertanyaan, mengapa digunakan dalam kasus ini rc.local, jika ada systemd, tapi beberapa contoh akan saya berikan.

Untuk mulai dengan, file /etc/rc.local harus dapat dieksekusi:

chmod + x /etc/rc.local

Rc.local harus ditambahkan ke startup systemd:

systemctl mengaktifkan rc-local

Dan pada contoh yang sama nginx, kita bisa menambahkan rc.local perintah mulai server web:

layanan mulai nginx

Tapi saya jarang menggunakannya rc.local untuk memulai layanan. Lebih sering rc.local digunakan saat Anda perlu menjalankan skrip, atau menjalankan perintah sekali.

Misalnya, saya membuat skrip /root/test.sh yang melakukan beberapa tindakan, dan saya ingin memulainya segera setelah memulai sistem. Tambahkan baris ke file rc.local:

sh /root/test.sh

Dimulai dengan CentOS 7, pengembang menunjukkan itu rc.local daemon kuno dan skrip autostart atau layanan melalui itu, ini adalah abad terakhir. Tetapi sementara itu bekerja, saya menggunakannya, karena sangat mudah dioperasikan.

Buat daemon Anda sendiri dan tambahkan ke systemd

Anda dapat membuat daemon Anda sendiri, yang dapat dikontrol melalui systemd.

Sebagai contoh, kita perlu menjalankan skrip yang sama /root/test.sh setelah me-reboot sistem. Mari kita mulai dengan membuat file untuk layanan kami di masa depan:

sentuh /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service

Isi file adalah sebagai berikut:

[Unit] Deskripsi = Pengaturan Template Layanan Setelah = network.target [Layanan] Jenis = oneshot Pengguna = root ExecStart = / root / test.sh [Instal] WantedBy = multi-user.target 

Parameter kunci:

Pengguna - pengguna di mana daemon akan diluncurkan

Type = oneshot - proses akan selesai sebelum peluncuran unit lebih lanjut

Periksa dan mulai ulang:
# systemctl daemon-reload
# systemctl memulai test-script.service
# systemctl status test-script.service

● test-script.service - Test Loaded: dimuat (/etc/systemd/system/test-script.service; dinonaktifkan; preset vendor: dinonaktifkan) Aktif: aktif (berjalan) 

Jika Anda merasa nyaman dengan cara kerja layanan ini, tambahkan ke pengisian otomatis:

# systemctl aktifkan test-script.service

Dibuat symlink dari /etc/systemd/system/multi-user.target.wants/test-script.service ke /etc/systemd/system/test-script.service.

Dengan demikian, Anda dapat menambahkan skrip Anda ke startup melalui systemd.

Mulai otomatis melalui cron

Jika Anda perlu menjalankan skrip atau perintah pada frekuensi tertentu, Anda dapat menggunakannya cron-ohm:

crontab -e - buka terminal untuk menulis tugas cron

Dan tambahkan tugas yang Anda butuhkan di sana, misalnya:

* * * * * /root/test.sh - jalankan skrip setiap menit.

Anda dapat menulis skrip anjing penjaga, yang, pada penugasan, akan memeriksa, misalnya, status layanan dan, jika tidak berhasil, mulailah. Pada beberapa proyek saya, saya menggunakan skema serupa.

Untuk membuat daftar semua tugas dalam mahkota, Anda perlu menjalankan perintah:

# crontab -l

* * * * * /root/test.sh

Nilai yang valid untuk waktu mulai pekerjaan cron adalah dalam urutan:

  • Menit 0 hingga 59
  • Jam 0 hingga 59
  • Hari dalam sebulan dari 1 hingga 31
  • Bulan 1 hingga 12
  • Hari dalam minggu 0 hingga 7 (0 atau 7 adalah hari Minggu)

Dalam tugas kami, skrip berjalan setiap menit, jadi ada "*".

Anda juga dapat menempatkan skrip yang Anda butuhkan di direktori cron:

  • /cron.daily - eksekusi skrip setiap hari
  • /cron.hourly - eksekusi skrip setiap jam
  • /cron.monthly - eksekusi skrip bulanan
  • /cron.weekly - eksekusi skrip mingguan

Skrip dalam direktori yang ditentukan akan dijalankan sesuai dengan jadwal yang disiapkan secara otomatis.

.bashrc: skrip autostart pada startup terminal

Jika Anda perlu melakukan beberapa tindakan saat memulai terminal ssh, Anda dapat menambahkan perintah atau eksekusi skrip apa pun ke .bash_profile atau .bashrc. Secara teoritis, Anda dapat menambahkan tindakan apa pun ke semua file ini, itu akan tetap dijalankan. Biasanya semua yang Anda butuhkan ditambahkan .bashrc, dan saya sendiri .bashrc habis .bash_profile.

Saya menambahkan ke file .bashrc perintah restart layanan web nginx:

layanan nginx restart

Setelah itu, saya menyimpan file dan me-restart terminal:

Seperti yang Anda lihat, ketika memulai terminal, server web telah dimulai kembali. Tindakan apa yang dapat dilakukan saat memulai terminal? Mungkin menjalankan beberapa utilitas tambahan, misalnya, memeriksa uptime server:

Atau apakah Anda ingin itu ketika Anda memulai terminal, Anda segera mendapatkan ke direktori yang Anda butuhkan dan menjalankan mc, tambahkan ke .bashrc

cd / var /
mc

Saya harap artikel tentang pengelolaan startup layanan dan skrip di LInux ini (artikel ini ditulis untuk CentOS) ternyata bermanfaat bagi Anda. Tentunya mereka yang hanya mempelajari dasar-dasar administrasi sistem Linux, informasi ini akan sangat membantu.