sistemd

fail unit sistemd membuat perkhidmatan

fail unit sistemd membuat perkhidmatan
Pengurusan perkhidmatan adalah sesuatu yang tidak anda fikirkan ketika anda menggunakan stesen kerja Linux atau pelayan Linux setiap hari, tetapi apabila tidak ada di sana, anda pasti akan membencinya. Apabila anda membuat contohnya program pelayan baru yang perlu dijalankan 24/7, melakukan cabaran ini tanpa pengurusan perkhidmatan adalah mimpi ngeri di mana anda sebenarnya membuat sistem perkhidmatan kecil sendiri, yang jelas tidak akan sehebat pengurus yang dikembangkan oleh pasukan penuh selama bertahun-tahun, bagaimanapun.

Dengan perkhidmatannya, systemd menjadikan semua ini lebih mudah, lebih mudah. Sebaik sahaja anda menginginkan sesuatu yang memantau aplikasi anda dan mengawalnya dengan mudah, systemd adalah cara untuk pergi, dan itulah yang akan saya jelaskan di sini!

Di manakah Perkhidmatan Systemd

Untuk menambah perkhidmatan baru, anda perlu menjawab soalan ini. Seperti biasa di systemd, ia bergantung kepada jika perkhidmatan ini hanya untuk pengguna anda atau keseluruhan sistem. Kami akan memberi tumpuan kepada bagaimana sistemd berfungsi untuk keseluruhan perkhidmatan sistem.

Lokasi yang tepat bergantung kepada mengapa dan bagaimana perkhidmatan itu dipasang. Sekiranya perkhidmatan tersebut dipasang oleh pengurus pakej, ia biasanya akan berada di / usr / lib / systemd / system. Untuk perisian yang anda kembangkan atau yang tidak menyokong systemd dengan sendirinya, anda akan meletakkan fail perkhidmatan di / usr / local / lib / systemd / system. Perlu diingat bahawa sebilangan pengedaran tidak menyokong folder ini di / usr / local. Akhirnya, jika anda ingin mengkonfigurasi perkhidmatan systemd yang ada, / etc / systemd / system adalah cara untuk pergi.

Di dalam folder ini, anda boleh menemui beberapa sambungan fail seperti *.soket, *.sasaran atau *.perkhidmatan. Jelas sekali kita akan fokus pada yang terakhir. systemd menggunakan nama fail sebagai nama perkhidmatan semasa memulakannya atau menghentikannya dll. Oleh itu, biasanya nama fail dalam perkhidmatan hanya mengandungi watak alfanumerik bersama tanda hubung dan garis bawah. Semasa pengembangan, saya cadangkan untuk membuatnya di dalam dokumen anda dan kemudian salin ke lokasi systemd setelah selesai, yang akan mengelakkan masalah anda jika anda menyimpan di tengah penyuntingan.

OK jadi sila buat fail perkhidmatan anda dalam dokumen anda. Sekarang kami sudah bersedia untuk mengkaji cara menulis fail ini.
[Catatan: Lihat potensi laporan bug di bahagian komen dari catatan blog ini]

[Unit]
Penerangan = Pelayan HTTP Aplikasi Web Penguna (berjalan di port 8080)
WantedBy = berbilang pengguna.sasaran
 
[Perkhidmatan]
Jenis = sederhana
ExecStart = / usr / bin / python3 / usr / local / bin / penguin-web-app / main.py
Mulakan semula = selalu

Format fail sebenarnya hampir dengan ini. Saya tahu mungkin pelik memandangkan fail ini sering dijumpai di Windows tetapi begitulah cara ia berfungsi. Fail perkhidmatan pertama kali dibahagikan kepada 2 bahagian: [Unit] dan [Perkhidmatan]. Setiap bahagian mengkonfigurasi aspek tertentu dari sistemd: [Unit] berisi elemen yang dikongsi oleh semua fail unit sistemd sementara [Perkhidmatan] hanya untuk konfigurasi khusus untuk mengatur layanan baru.

Kemudian bahagian dikonfigurasikan dengan sifat seperti Deskripsi = atau ExecStart =. Nilai dipisahkan dari nama harta dengan tanda sama = tanpa ruang.

Mari kembali ke fail yang ditunjukkan di atas. Ini menggambarkan perkhidmatan yang dirancang untuk menjalankan aplikasi web yang ditulis dalam Python mengenai penguin. systemd akan menghidupkannya semula setiap kali proses keluar dan memulakan pelayan semasa permulaan pelayan jika anda mengaktifkannya dengan perintah aktifkan systemctl. Sejuk eh?

Tetapi anda mungkin aplikasi web anda yang seterusnya bukan mengenai penguin - dan itu memalukan - dan ia tidak ditulis dalam Python. Dalam kes ini, anda ingin mengetahui lebih lanjut mengenai kemungkinan konfigurasi.

Sifat Perkhidmatan Systemd

Mari pertama kali memfokuskan mengenai sifat di [Unit]:

Penerangan = hanya untuk memberi penerangan yang jelas mengenai apa yang dilakukan oleh perkhidmatan. Ia dipaparkan dalam senarai perkhidmatan, log perkhidmatan sehingga anda mahu deskriptif tetapi harus tetap dalam satu baris dan satu ayat.

WantedBy = membenarkan untuk mengatakan kepada systemd: apabila perkara ini dimulakan, mulakan juga saya. Secara amnya anda akan meletakkan nama sasaran. Contoh sasaran bersama:

  1. berbilang pengguna.target: apabila pelayan OK dan bersedia untuk menjalankan aplikasi baris perintah
  2. grafik.target: apabila GNOME atau KDE sudah siap
  3. rangkaian-up.target: apabila pelayan dihubungkan dengan betul ke rangkaian

OK untuk permulaan sifat-sifat [Unit] ini sudah mencukupi. Mari lihat [Perkhidmatan] sekarang.

Taip = membantu systemd dalam mengetahui bagaimana perkhidmatan dijalankan. Berikut adalah jenis biasa:

  1. sederhana mungkin yang paling biasa digunakan: systemd menganggap proses yang anda lancarkan sebagai yang melakukan perkhidmatan. Sekiranya proses berhenti, ia menganggap perkhidmatan juga dihentikan, dll.
  2. forking lebih disukai untuk aplikasi yang ditulis untuk menjadi pelayan tetapi tanpa bantuan sistem pengurusan perkhidmatan. Pada dasarnya ia mengharapkan proses yang dilancarkan untuk garpu dan garpu dianggap sebagai proses terakhir untuk perkhidmatan. Agar lebih tepat, anda juga dapat membantu sistem dengan fail PID, di mana PID proses untuk dilacak ditulis oleh aplikasi yang dilancarkan.

ExecStart = mungkin yang paling penting untuk perkhidmatan: ia menentukan aplikasi yang akan dilancarkan semasa memulakan perkhidmatan. Seperti yang anda lihat dalam perkhidmatan Penguin, saya telah menggunakan / usr / bin / python3 dan bukan python3 secara langsung. Ini kerana dokumentasi systemd secara eksplisit mengesyorkan untuk menggunakan jalan mutlak untuk mengelakkan kejutan.

Tetapi itu juga untuk alasan lain. Sistem pengurusan perkhidmatan lain cenderung berdasarkan skrip Shell. Walau bagaimanapun, systemd, untuk tujuan prestasi, tidak menjalankan shell secara lalai. Oleh itu, anda tidak dapat memberikan arahan shell secara langsung di ExecStart =. Anda masih boleh menggunakan skrip shell dengan melakukan:

ExecStart = / usr / bin / bash / usr / local / bin / pelancaran-penguin-pelayan.sh

Tidak begitu sukar? Perhatikan bahawa jika anda perlu menjalankan beberapa proses untuk memberi isyarat agar perkhidmatan anda berhenti dengan bersih, ExecStop = ada, dan juga ExecReload = untuk memuatkan semula perkhidmatan.

Mulakan semula = membolehkan anda memberitahu secara jelas kapan perkhidmatan harus dimulakan semula. Ini adalah salah satu ciri penting dari systemd: memastikan perkhidmatan anda kekal selama yang anda mahukan, jadi perhatikan pilihan ini.

Mulakan semula = Makna
selalu systemd akan terus memulakannya semula setiap kali ia berhenti atau mogok. Baiklah, sehingga anda melakukan systemctl hentikan nama perkhidmatan.perkhidmatan.

Ia sesuai untuk pelayan dan perkhidmatan dalam talian kerana anda lebih suka memulakan semula perkhidmatan yang tidak berguna daripada menghidupkan semula perkhidmatan secara manual tanpa sebab.

tidak normal Apabila proses perkhidmatan terhenti, mulakan semula perkhidmatan. Namun, jika aplikasi keluar dengan bersih, jangan mulakan semula.

Ia lebih berguna untuk cron-jobs seperti perkhidmatan yang perlu melakukan tugas dengan pasti tetapi tidak perlu dijalankan sepanjang masa.

pada kegagalan Sama seperti on-abnormal, tetapi juga menghidupkan semula perkhidmatan ketika aplikasi keluar dengan bersih tetapi dengan kod keluar bukan sifar. Kod keluar bukan sifar secara am bermaksud ralat berlaku.
tidak systemd tidak akan memulakan semula perkhidmatan secara automatik.

Secara amnya berguna untuk mendapatkan akses ke ciri systemd lain seperti log tanpa ciri restart.

WorkingDirectory = dapat menegakkan direktori yang berfungsi semasa melancarkan aplikasi anda. Nilai mestilah jalan direktori mutlak. Direktori berfungsi digunakan apabila anda menggunakan jalan relatif dalam kod aplikasi anda. Untuk perkhidmatan penguin kami, mungkin:

WorkingDirectory = / srv / penguin-web-aplikasi /

Kemudian, keselamatan adalah mustahak sehingga anda umumnya tidak mahu melancarkan perkhidmatan anda dengan hak root. Pengguna = dan Kumpulan = membolehkan anda menetapkan nama pengguna atau kumpulan atau UID / GID di mana aplikasi anda akan dilancarkan. Sebagai contoh:

Pengguna = penguin-web
Kumpulan = penguin-web

EnvironmentFile = adalah pilihan yang hebat. Aplikasi yang dijalankan sebagai perkhidmatan sering memerlukan konfigurasi dan fail persekitaran yang memungkinkan untuk menetapkan konfigurasi itu dengan dua cara:

  1. Aplikasi boleh membaca secara langsung pemboleh ubah persekitaran.
  2. Tetapi anda juga boleh menetapkan argumen baris perintah yang berbeza ke aplikasi anda tanpa mengubah fail perkhidmatan.

Sintaks fail ini mudah: anda taip nama pemboleh ubah persekitaran, tanda sama = dan kemudian nilainya. Kemudian anda meletakkan jalan mutlak fail persekitaran anda ke dalam properti EnvironmentFile.

Contohnya:

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

Dan fail / etc / penguin-web-app / environment mengandungi:

LISTEN_PORT = 8080

Kemudian aplikasi web penguin kami akan mendapat akses ke LISTEN_PORT pemboleh ubah persekitaran dan mendengar port yang diharapkan.

Simpan dan Mulakan Perkhidmatan Systemd yang Baru Dibuat

Oleh itu, jika anda mengikuti nasihat saya, anda mengedit fail perkhidmatan anda di direktori rumah anda. Setelah anda berpuas hati, salin fail tersebut ke / usr / local / lib / systemd / system, dengan andaian pengedaran anda menyokong jalan tersebut. Nama fail fail perkhidmatan anda akan menjadi nama perkhidmatannya. Nama fail ini mesti diakhiri dengan .perkhidmatan. Sebagai contoh, untuk pelayan penguin kami, itu adalah aplikasi web penguin.perkhidmatan.

Kemudian, anda harus memberitahu sistem bahawa anda telah menambah perkhidmatan baru, jadi anda perlu menaip arahan ini:

$ sudo systemctl daemon-reload

Baiklah sekarang systemd menyedari perkhidmatan baru anda, dengan anggapan fail anda tidak mengandungi kesalahan sintaks. Lagipun, ini adalah fail pertama anda jadi kemungkinan anda akan melakukan kesilapan. Anda harus menjalankan perintah ini di atas pada setiap kemas kini dalam fail perkhidmatan anda.

Sekarang, masa untuk memulakan perkhidmatan:

$ sudo systemctl mulakan penguin-web-app.perkhidmatan

Sekiranya gagal dengan Unit tidak dijumpai ralat seperti ini:

$ sudo systemctl mulakan penguin-web-app.perkhidmatan
Gagal memulakan aplikasi penguin-web.perkhidmatan: Unit tidak dijumpai.

Ini bermaksud pengedaran anda tidak menyokong direktori atau anda tidak menamakan fail perkhidmatan anda dengan betul. Pastikan anda melihat.

Sekiranya anda menyediakan perkhidmatan dengan WantedBy = dan mahu perkhidmatan anda dimulakan secara automatik, anda harus mengaktifkannya, dengan arahan ini:

$ sudo systemctl mengaktifkan aplikasi penguin-web.perkhidmatan

Perkara yang menarik dengan perkhidmatan adalah berjalan di latar belakang. Masalahnya: bagaimana mengetahui jika ia berjalan dengan betul dan jika ia berjalan jika berjalan di latar belakang? Jangan risau, pasukan systemd juga memikirkannya dan memberikan arahan untuk melihat apakah ia berjalan dengan betul, kerana berapa banyak masa, dan lain-lain:

$ sistemctl status penguin-aplikasi web.perkhidmatan

Kesimpulannya

Tahniah! Kini anda dapat menguruskan aplikasi anda tanpa anda peduli untuk memulakannya semula secara manual setiap masa. Sekarang, saya cadangkan anda membaca artikel kami yang lain mengenai log systemd: Master journalctl: memahami log sistemd. Dengan itu anda boleh menggunakan sistem pembalakan yang kuat pada perkhidmatan baru anda dan membina pelayan yang lebih dipercayai!

Mengawal & menguruskan pergerakan tetikus antara beberapa monitor di Windows 10
Pengurus Tetikus Paparan Dwi membolehkan anda mengawal & mengkonfigurasi pergerakan tetikus antara beberapa monitor, dengan memperlahankan pergerakann...
WinMouse membolehkan anda menyesuaikan & meningkatkan pergerakan penunjuk tetikus pada PC Windows
Sekiranya anda ingin meningkatkan fungsi lalai penunjuk tetikus anda gunakan perisian percuma WinMouse. Ia menambah lebih banyak ciri untuk membantu a...
Butang klik kiri tetikus tidak berfungsi pada Windows 10
Sekiranya anda menggunakan tetikus khusus dengan komputer riba, atau komputer desktop anda tetapi butang klik kiri tetikus tidak berfungsi pada Window...