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.
Sumber dan tautan terkait
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