Tutorial ini menunjukkan cara menggunakan incron pada sistem Ubuntu untuk menjalankan perintah saat file atau Direktori diubah. Daemon incron mirip dengan cron, tetapi alih-alih menjalankan perintah berdasarkan waktu, daemon incron dapat memicu perintah saat terjadi peristiwa file atau direktori (misalnya, modifikasi file, perubahan izin, dll.).
1 Memasang Incron
Langkah-langkah berikut harus dijalankan sebagai pengguna root. Silakan login ke shell sistem Ubuntu Anda dan menjadi root dengan:
sudo su
Perangkat lunak Incron tersedia di repositori Ubuntu. Oleh karena itu, saya akan menginstalnya dengan apt seperti ini:
apt-get install incron
3 Cara menggunakan Incron
Seperti disebutkan dalam bab pertama, Incron memiliki banyak kesamaan dengan alat Cron. Jika Cron memiliki perintah crontab untuk mengelola cronjobs, Incron memiliki perintah incrontab. Anda dapat menggunakan perintah incrontab daftar opsi (-l), edit (-e), dan hapus (-r) untuk menampilkan dan mengubah entri incrontab.
Jalankan perintah berikut untuk mendapatkan gambaran lengkap tentang incrontab:
man incrontab
Di halaman manual Anda akan menemukan catatan berikut:
Jika /etc/incron.allow ada, hanya pengguna yang terdaftar di sini yang dapat menggunakan incron. Jika tidak, jika /etc/incron.deny ada, hanya pengguna yang TIDAK terdaftar di sini yang dapat menggunakan incron. Jika tidak ada file ini, semua orang diizinkan untuk menggunakan incron. (Catatan penting:Perilaku ini tidak aman dan mungkin akan diubah agar kompatibel dengan gaya yang digunakan oleh ISC Cron.) Lokasi file ini dapat diubah dalam konfigurasi.
Artinya jika kita ingin menggunakan incrontab sebagai root, kita harus menghapus /etc/incron.allow (yang tidak aman)...
rm -f /etc/incron.allow
... atau kami menambahkan pengguna root ke file incron.allow ( yang merupakan opsi yang disarankan). Buka file /etc/incron.allow:
nano /etc/incron.allow
Dan tambahkan baris berikut.
root
Sebelum Anda melakukan ini, Anda akan mendapatkan pesan kesalahan seperti ini saat mencoba menggunakan incrontab:
server1:~# incrontab -l
pengguna 'root' tidak diperbolehkan menggunakan incron
server1:~#
Setelah itu berfungsi:
server1:~# incrontab -l
tidak ada tabel untuk root
server1:~#
Kita sekarang dapat menggunakan perintah ini:
incrontab -e
Untuk membuat pekerjaan incron. Sekarang mari kita lihat halaman manual lebih dalam untuk memahami Sintaksnya.
man 5 incrontab
Halaman manual menunjukkan format baris tab cron. Formatnya mengikuti skema ini:
...di mana
IN_ACCESS File telah diakses (baca) (*)
IN_ATTRIB Metadata diubah (permissions, timestamps, extended attributes, dll.) (*)
IN_CLOSE_NOWRITE File tidak dibuka untuk menulis telah ditutup (*)
IN_CREATE File/direktori dibuat di watched directory (*)
IN_DELETE direktori diletkan file /indirectory itu sendiri dihapus
IN_MODIFY File telah dimodifikasi (*)
IN_MOVE_SELF Watched file/directory itu sendiri dipindahkan
IN_MOVED_FROM dipindahkan ke keluar direktori yang ditonton (*)
IN_OPEN File dibuka (*)
Saat memantau direktori, peristiwa yang ditandai dengan tanda bintang (*) di atas dapat terjadi untuk file dalam direktori, dalam hal ini bidang nama di
data peristiwa yang dikembalikan mengidentifikasi nama file di dalam direktori.
Simbol IN_ALL_EVENTS didefinisikan sebagai topeng bit dari semua kejadian di atas. Dua simbol kenyamanan tambahan adalah IN_MOVE, yang merupakan kombinasi dari IN_MOVED_FROM dan IN_MOVED_TO, dan IN_CLOSE yang menggabungkan IN_CLOSE_WRITE dan IN_CLOSE_NOWRITE.
Simbol lebih lanjut berikut dapat ditentukan dalam topeng:
IN_DONT_FOLLOW Jangan mereferensikan nama jalur jika itu adalah tautan simbolis
IN_ONESHOT Monitor nama jalur untuk hanya satu peristiwa
IN_ONLYDIR directorypath jika nama jalur tontonan sajaSelain itu, ada simbol yang tidak muncul di kumpulan simbol inotify. Ini adalah IN_NO_LOOP. Simbol ini menonaktifkan pemantauan peristiwa hingga peristiwa saat ini sepenuhnya ditangani (sampai proses turunannya keluar).
adalah perintah yang harus dijalankan saat event terjadi. Wildard berikut dapat digunakan di dalam spesifikasi perintah: $$ tanda dolar
[dilindungi email] jalur sistem file yang diawasi (lihat di atas)
$# nama file yang terkait dengan peristiwa
$% tanda peristiwa (secara tekstual)
$&tanda peristiwa (secara numerik)Jika Anda menonton sebuah direktori, [email protected] akan menyimpan jalur direktori dan $# file yang memicu peristiwa tersebut. Jika Anda menonton file, [email protected] menyimpan jalur lengkap ke file tersebut dan $# kosong.
Jika Anda membutuhkan wildcard tetapi tidak yakin dengan apa terjemahannya, Anda dapat membuat tugas incron seperti ini.
Buat direktori yang akan diawasi:
mkdir /tmp/testdirKemudian buka incrontab:
incrontab -edan tambahkan baris berikut:
/tmp/testdir/ IN_MODIFY echo "$$ [dilindungi email] $# $% $&"Kemudian Anda membuat atau memodifikasi file di direktori /tmp/testdir/ dan lihat /var/log/syslog - log ini menunjukkan kapan pekerjaan incron dipicu, apakah berhasil atau jika ada kesalahan, dan apa yang sebenarnya perintah itu dieksekusi (yaitu, wildcard diganti dengan nilai sebenarnya).
Untuk tujuan pengujian, saya akan menambahkan dua file, helloworld.txt dan helloworld2.txt di /tmp/testdir/ dengan perintah echo:
echo 'Apa kabar?'> /tmp/testdir/helloworld.txt
echo 'Apa kabar?'> /tmp/testdir/helloworld2.txtJadi mari kita periksa syslog dengan tail untuk incron ecents:
ekor /var/log/syslog...
12 Apr 18:49:22 server1 incrond[6441]:(root) CMD (echo "$ /tmp/testdir/ helloworld.txt IN_MODIFY 2")
12 Apr 18 :50:31 server1 incrond[6441]:(root) CMD (echo "$ /tmp/testdir/ helloworld2.txt IN_MODIFY 2")Sekarang cukup teori. Mari kita buat pekerjaan incron pertama kita. Saya ingin memantau file /etc/apache2/apache2.conf dan direktori /etc/apache2/vhosts/, dan setiap kali ada perubahan, saya ingin incron me-restart Apache. Beginilah cara kami melakukannya:
incrontab -e/etc/apache2/apache2.conf IN_MODIFY /usr/sbin/service apache2 restart/etc/apache2/sites-available/ IN_MODIFY /usr/sbin/service apache2 restartItu dia. Untuk tujuan pengujian, Anda dapat memodifikasi konfigurasi Apache dan melihat /var/log/syslog, dan Anda akan melihat bahwa incron memulai ulang Apache.
CATATAN :Jangan melakukan tindakan apa pun dari dalam pekerjaan incron di direktori yang Anda pantau untuk menghindari pengulangan. Contoh: Saat Anda memantau direktori /tmp untuk perubahan dan setiap perubahan memicu skrip yang menulis file log di /tmp, ini akan menyebabkan loop dan mungkin membawa sistem Anda ke beban tinggi atau bahkan crash.
Untuk membuat daftar semua tugas incron yang ditentukan, Anda dapat menjalankan:
incrontab -lserver1:~# incrontab -l
/etc/apache2/apache2.conf IN_MODIFY /usr/sbin/service apache2 restart
/etc/apache2/vhosts/ IN_MODIFY /usr/sbin/service apache2 mulai ulang
server1:~#Untuk menghapus semua tugas incron dari pengguna saat ini, jalankan:
incrontab -rserver1:~# incrontab -r
menghapus tabel untuk 'root' pengguna
tabel untuk 'root' pengguna berhasil dihapus
server1:~#
4 Tautan
- incron:http://inotify.aiken.cz/?section=incron&page=about&lang=en