GNU/Linux >> Belajar Linux >  >> Linux

Pengantar singkat untuk unit jalur

systemd hari ini membaca konfigurasi inisialisasi untuk setiap daemon dari kumpulan file unit , yang sering disebut satuan . Dengan unit jalur , Anda dapat memantau file dan direktori untuk acara tertentu. Jika peristiwa tertentu terjadi, unit layanan dieksekusi, dan biasanya membawa nama yang sama dengan unit jalur. Saya akan menunjukkan cara kerjanya dengan contoh sederhana.

Mari kita asumsikan kita ingin memonitor sebuah file. Setiap kali file ditutup setelah menulis, skrip tertentu harus dimulai.

Unit jalur:example.path

Di direktori /etc/systemd/system/ kita buat file example.path dengan isi sebagai berikut:

[Unit]
Description=Monitor the file for changes

[Path]
PathChanged=/home/john/testfile
Unit=example.service

[Install]
WantedBy=multi-user.target

Di [Path] bagian, PathChanged= menentukan jalur absolut ke file yang akan dipantau, sementara Unit= menunjukkan unit layanan mana yang akan dieksekusi jika file berubah. Unit ini (example.path ) harus dimulai saat sistem dalam mode multi-pengguna.

Selanjutnya, kami membuat unit layanan yang sesuai example.service di /etc/systemd/system/ .

Unit layanan:example.service

Jika file testfile perubahan (artinya ditulis dan ditutup), unit layanan berikut akan dipanggil untuk mengeksekusi skrip yang ditentukan:

[Unit]
Description=Executes script when a file has changed.

[Service]
Type=simple
ExecStart=/home/john/script.sh

[Install]
WantedBy=multi-user.target

Dalam contoh ini, file script.sh hanya berisi kode berikut:

#!/bin/bash
echo "file changed" >/home/john/output.txt

Untuk menguji unit jalur, kedua unit baru ini harus diaktifkan, jadi jalankan:

$ sudo systemctl enable example.{path,service}
$ sudo systemctl start example.path

Jika sekarang Anda menulis ulang—atau menulis ke—file testfile , unit layanan yang sesuai dijalankan, dan file output.txt dibuat di pengguna john direktori home .

Daftar yang tidak lengkap dan tidak lengkap berikut memberikan beberapa contoh di mana unit jalur dapat membuat Hari Sysadmin Anda sedikit lebih mudah:

  • Mulai pemrosesan data berdasarkan peristiwa.
  • Pantau file di bawah /etc , dan kirim notifikasi saat terjadi perubahan.
  • Pantau import folder untuk file baru, dan mulai memproses.

Hal-hal yang harus diperhatikan

Selama pengujian saya dengan unit jalur, saya perhatikan bahwa tidak semua peristiwa ditangkap dalam keadaan tertentu. Misalnya, siapkan unit jalur untuk memantau perubahan jalur, lalu jalankan perintah berikut:

$ touch /path/file && rm /path/file

Saya berharap unit layanan dieksekusi dua kali, di sini:pertama kali untuk touch perintah, dan kedua kalinya untuk rm memerintah. Saya mengajukan laporan Bugzilla untuk melihat apakah masalah ini disebabkan oleh desain, atau kesalahan yang dapat diperbaiki.

Jika Anda ingin mempelajari lebih lanjut tentang systemd unit, termasuk jalur dan unit layanan, lihat halaman manual berikut:

  • systemd.unit (5)
  • systemd.path (5)
  • systemd.service (5)

Juga, jika Anda tertarik dengan hasil laporan bug saya, Anda dapat mengikutinya di sini:

Bug 1722627 - Unit Jalur tidak menangkap setiap peristiwa


Linux
  1. Menggunakan perintah systemctl untuk mengelola unit systemd

  2. Pengantar GNU Autotools

  3. Bagaimana mengelola unit systemd saat start-up

  1. Pengantar editor vi

  2. Pengantar singkat tentang peran Ansible untuk administrasi sistem Linux

  3. Cd Ke Direktori Nama-Tidak Dikenal Di Jalur yang Diketahui?

  1. Pengantar Docker

  2. Pengenalan iptables

  3. Plesk:Pendahuluan