sistemd

file unit systemd membuat layanan

file unit systemd membuat layanan
Manajemen layanan adalah sesuatu yang bahkan tidak Anda pikirkan ketika Anda menggunakan workstation Linux atau server Linux Anda setiap hari, tetapi ketika tidak ada, Anda akan benar-benar membencinya. Ketika Anda membuat misalnya program server baru yang perlu dijalankan 24/7, melakukan tantangan ini tanpa manajemen layanan adalah mimpi buruk di mana Anda sebenarnya membuat sistem layanan kecil sendiri, yang jelas tidak akan sebaik manajer yang dikembangkan oleh tim penuh selama bertahun-tahun, bagaimanapun.

Dengan layanannya, systemd membuat semua ini lebih mudah, sangat mudah. Segera setelah Anda menginginkan sesuatu memantau aplikasi Anda dan mengontrolnya dengan mudah, systemd adalah cara yang harus dilakukan, dan itulah yang akan saya jelaskan di sini!

Di mana Layanan Systemd

Untuk menambahkan layanan baru, Anda harus menjawab pertanyaan ini. Seperti biasa di systemd, itu tergantung apakah layanan hanya untuk pengguna Anda atau seluruh sistem. Kami akan fokus pada bagaimana systemd bekerja untuk seluruh layanan sistem.

Lokasi tepatnya tergantung mengapa dan bagaimana layanan dipasang service. Jika layanan diinstal oleh manajer paket, umumnya akan berada di /usr/lib/systemd/system. Untuk perangkat lunak yang Anda kembangkan atau yang tidak mendukung systemd dengan sendirinya, Anda akan meletakkan file layanan di /usr/local/lib/systemd/system. Harap diingat bahwa beberapa distribusi tidak mendukung folder ini di /usr/local. Terakhir, jika Anda ingin mengonfigurasi layanan systemd yang ada, /etc/systemd/system adalah caranya.

Di dalam folder ini Anda dapat menemukan beberapa ekstensi file seperti *.stopkontak, *.sasaran atau *.layanan. Jelas kita akan fokus pada yang terakhir. systemd menggunakan nama file sebagai nama layanan saat memulai atau menghentikannya, dll. Jadi umumnya nama file dalam layanan hanya berisi karakter alfanumerik bersama dengan tanda hubung dan garis bawah. Selama pengembangan saya sarankan untuk membuatnya di dokumen Anda dan kemudian menyalinnya ke lokasi systemd setelah selesai, itu akan menghindari masalah Anda jika Anda menyimpannya di tengah pengeditan.

OK jadi silakan buat file layanan Anda di dokumen Anda. Sekarang kami siap untuk meninjau cara menulis file ini.
[Catatan: Lihat laporan bug potensial di bagian komentar dari posting blog ini]

[Satuan]
Description=Server HTTP Aplikasi Web Penguin (berjalan di port 8080)
WantedBy=multi-pengguna.target
 
[Layanan]
Jenis = sederhana
ExecStart=/usr/bin/python3 /usr/local/bin/penguin-web-app/main.py
Mulai ulang = selalu

Format file sebenarnya mendekati ini. Saya tahu ini mungkin aneh mengingat file ini sering ditemukan di Windows tetapi begitulah cara kerjanya. File layanan pertama-tama dibagi menjadi 2 bagian: [Unit] dan [Layanan]. Setiap bagian mengonfigurasi aspek spesifik systemd: [Unit] berisi elemen yang dibagikan oleh semua file unit systemd sementara [Layanan] hanya untuk konfigurasi khusus untuk menyiapkan layanan baru.

Kemudian bagian tersebut dikonfigurasi dengan properti seperti Description= atau ExecStart=. Nilai dipisahkan dari nama properti dengan tanda sama dengan = tanpa spasi.

Mari kita kembali ke file yang ditunjukkan di atas. Ini menjelaskan layanan yang dirancang untuk menjalankan aplikasi web yang ditulis dengan Python tentang penguin. systemd akan memulai ulang setiap kali proses keluar dan memulai server saat server memulai jika Anda mengaktifkannya dengan perintah systemctl enable. keren ya?

Tapi Anda mungkin aplikasi web Anda berikutnya bukan tentang penguin - dan itu memalukan - dan itu tidak ditulis dengan Python. Dalam hal ini Anda ingin mempelajari lebih lanjut tentang kemungkinan konfigurasi.

Properti Layanan Systemd

Mari kita fokus dulu tentang properti di [Unit]:

Description= hanya tentang memberikan deskripsi yang jelas tentang apa yang dilakukan layanan. Ini ditampilkan dalam daftar layanan, log layanan sehingga Anda ingin deskriptif tetapi harus tetap dalam satu baris dan satu kalimat.

WantedBy= memungkinkan untuk mengatakan kepada systemd: ketika hal ini dimulai, mulailah saya juga. Umumnya Anda akan memasukkan nama target. Contoh target umum:

  1. multi-pengguna.target: ketika server OK dan siap menjalankan aplikasi baris perintah
  2. grafis.target: ketika GNOME atau KDE siap
  3. jaringan-up.target: ketika server terhubung dengan benar ke jaringan

OK untuk permulaan, properti [Unit] ini sudah cukup. Mari kita lihat [Layanan] sekarang.

Type= membantu systemd dalam cara mengetahui apakah suatu layanan sedang berjalan. Berikut adalah jenis umum:

  1. simple mungkin yang paling umum digunakan: systemd menganggap proses yang Anda luncurkan sebagai proses yang melakukan layanan. Jika proses berhenti, itu menganggap layanan juga berhenti, dll.
  2. forking lebih disukai untuk aplikasi yang ditulis sebagai server tetapi tanpa bantuan sistem manajemen layanan service. Pada dasarnya ia mengharapkan proses yang diluncurkan ke fork dan fork itu dianggap sebagai proses akhir untuk layanan. Agar lebih akurat, Anda juga dapat membantu systemd dengan file PID, di mana PID proses yang akan dilacak ditulis oleh aplikasi yang diluncurkan.

ExecStart= mungkin yang paling penting untuk suatu layanan: ini menentukan aplikasi apa yang akan diluncurkan saat memulai layanan. Seperti yang Anda lihat di layanan Penguin, saya telah menggunakan /usr/bin/python3 dan bukan python3 langsung. Itu karena dokumentasi systemd secara eksplisit merekomendasikan untuk menggunakan jalur absolut untuk menghindari kejutan.

Tapi itu juga karena alasan lain. Sistem manajemen layanan lain cenderung didasarkan pada skrip Shell. Namun systemd, untuk alasan kinerja, tidak menjalankan shell secara default. Jadi Anda tidak dapat memberikan perintah shell secara langsung di ExecStart=. Namun Anda masih dapat menggunakan skrip Shell dengan melakukan:

ExecStart=/usr/bin/bash /usr/local/bin/launch-penguin-server.SH

Tidak terlalu sulit kan?? Perhatikan bahwa jika Anda perlu menjalankan beberapa proses untuk memberi sinyal layanan Anda berhenti dengan bersih, ExecStop= ada, serta ExecReload= untuk memuat ulang layanan.

Restart= memungkinkan Anda memberi tahu secara eksplisit kapan layanan harus dimulai ulang. Ini adalah salah satu fitur penting dari systemd: ini memastikan bahwa layanan Anda tetap terjaga selama yang Anda inginkan, jadi perhatikan baik-baik opsi ini.

Mulai ulang = Berarti
selalu systemd akan terus memulai ulang setiap kali berhenti atau macet. Nah, sampai Anda melakukan systemctl stop service-name.layanan.

Ini sempurna untuk server dan layanan online karena Anda lebih suka beberapa restart yang tidak berguna daripada harus me-restart layanan secara manual tanpa alasan apa pun.

di-abnormal Saat proses layanan macet, mulai ulang layanan. Namun, jika aplikasi keluar dengan bersih, jangan mulai ulang.

Ini lebih berguna untuk pekerjaan cron seperti layanan yang perlu melakukan tugas dengan andal tetapi tidak perlu dijalankan sepanjang waktu.

di-kegagalan Sama seperti on-abnormal, tetapi juga me-restart layanan ketika aplikasi keluar dengan bersih tetapi dengan kode keluar yang tidak nol. Kode keluar bukan nol umumnya berarti terjadi kesalahan.
tidak systemd tidak akan memulai ulang layanan secara otomatis.

Umumnya berguna untuk mendapatkan akses ke fitur systemd lainnya seperti masuk tanpa fitur restart.

WorkingDirectory= dapat menerapkan direktori kerja saat meluncurkan aplikasi Anda. Nilainya harus berupa jalur direktori absolut. Direktori kerja digunakan saat Anda menggunakan jalur relatif dalam kode aplikasi Anda. Untuk layanan penguin kami, bisa jadi:

WorkingDirectory=/srv/penguin-web-app/

Kemudian, keamanan itu penting sehingga Anda biasanya tidak ingin meluncurkan layanan Anda dengan hak akses root. User= dan Group= memungkinkan Anda untuk mengatur nama pengguna atau grup atau UID/GID di mana aplikasi Anda akan diluncurkan. Sebagai contoh:

Pengguna=penguin-web
Grup=penguin-web

EnvironmentFile= adalah opsi yang kuat. Aplikasi yang berjalan sebagai layanan seringkali membutuhkan konfigurasi dan file lingkungan memungkinkan untuk mengatur konfigurasi itu dalam dua cara:

  1. Aplikasi dapat membaca langsung variabel lingkungan.
  2. Tetapi Anda juga dapat mengatur argumen baris perintah yang berbeda ke aplikasi Anda tanpa mengubah file layanan.

Sintaks file ini sederhana: Anda mengetik nama variabel lingkungan, tanda sama dengan = dan kemudian nilainya. Kemudian Anda meletakkan path absolut dari file lingkungan Anda ke dalam properti EnvironmentFile.

Jadi contoh:

EnvironmentFile=/etc/penguin-web-app/environment

Dan file /etc/penguin-web-app/environment berisi:

DENGARKAN_PORT=8080

Kemudian aplikasi web penguin kami akan memiliki akses ke variabel lingkungan LISTEN_PORT dan mendengarkan port yang diharapkan.

Simpan dan Mulai Layanan Systemd yang Baru Dibuat

Jadi jika Anda mengikuti saran saya, Anda mengedit file layanan Anda di direktori home Anda. Setelah Anda puas, salin file itu ke /usr/local/lib/systemd/system, dengan asumsi distribusi Anda mendukung jalur itu. Nama file dari file layanan Anda akan menjadi nama layanannya. Nama file ini harus diakhiri dengan .layanan. Misalnya, untuk server penguin kami, itu adalah aplikasi web penguin.layanan.

Kemudian, Anda harus memberi tahu systemd bahwa Anda menambahkan layanan baru, jadi Anda perlu mengetikkan perintah ini:

$ sudo systemctl daemon-reload

Oke sekarang systemd mengetahui layanan baru Anda, dengan asumsi file Anda tidak mengandung kesalahan sintaksis. Bagaimanapun, ini adalah file pertama Anda sehingga kemungkinan Anda akan membuat kesalahan. Anda harus menjalankan perintah ini di atas pada setiap pembaruan di file layanan Anda.

Sekarang, waktu untuk memulai layanan:

$ sudo systemctl start penguin-web-app.layanan

Jika gagal dengan Unit tidak ditemukan kesalahan seperti ini:

$ sudo systemctl start penguin-web-app.layanan
Gagal memulai aplikasi web penguin.layanan: Unit tidak ditemukan.

Ini berarti distribusi Anda tidak mendukung direktori atau Anda tidak menamai file layanan Anda dengan benar. Pastikan untuk memeriksa.

Jika Anda mengatur layanan Anda dengan WantedBy= dan ingin layanan Anda dimulai secara otomatis, Anda harus mengaktifkannya, dengan perintah ini:

$ sudo systemctl aktifkan aplikasi web penguin.layanan

Yang keren dengan layanan adalah layanan itu berjalan di latar belakang. Masalahnya: bagaimana cara mengetahui apakah itu berjalan dengan benar dan apakah itu berjalan jika berjalan di latar belakang? Jangan khawatir, tim systemd juga memikirkannya dan memberikan perintah untuk melihat apakah itu berjalan dengan baik, sejak berapa lama, dll:

$ systemctl status penguin-aplikasi web.layanan

Kesimpulan

Selamat! Anda sekarang dapat mengelola aplikasi Anda tanpa perlu memulai ulang secara manual setiap saat every. Sekarang, saya sarankan Anda untuk membaca artikel kami yang lain tentang log systemd: Master journalctl: memahami log systemd. Dengan itu Anda dapat menggunakan sistem pencatatan yang kuat pada layanan baru Anda dan membangun server yang lebih andal!

Cara Mengganti Tombol Kiri & Kanan Mouse di PC Windows 10
Sudah menjadi hal biasa bahwa semua perangkat mouse komputer dirancang secara ergonomis untuk pengguna yang tidak kidal. Tetapi ada perangkat mouse ya...
Tiru klik Mouse dengan mengarahkan mouse menggunakan Clickless Mouse di Windows 10
Menggunakan mouse atau keyboard dalam posisi yang salah dari penggunaan yang berlebihan dapat menyebabkan banyak masalah kesehatan, termasuk keteganga...
Tambahkan gerakan Mouse ke Windows 10 menggunakan alat gratis ini
Dalam beberapa tahun terakhir, komputer dan sistem operasi telah berkembang pesat. Ada saat ketika pengguna harus menggunakan perintah untuk menavigas...