Panduan ini menunjukkan bagaimana Anda dapat menginstal dan menggunakan incron pada sistem Debian 9 (Peregangan). Incron mirip dengan cron, tetapi alih-alih menjalankan perintah berdasarkan waktu, Incron dapat memicu perintah ketika peristiwa file atau direktori terjadi (misalnya, modifikasi file, perubahan izin, dll.).
1 Prasyarat
- Izin administrator sistem (login root). Semua perintah dalam tutorial ini harus dijalankan sebagai pengguna root pada shell.
- Saya akan menggunakan editor "nano" untuk mengedit file. Anda dapat mengganti nano dengan editor pilihan Anda atau menginstal nano dengan "apt-get install nano" jika tidak diinstal di server Anda.
2 Memasang Incron
Incron tersedia di repositori Debian, jadi kami menginstal incron dengan perintah apt berikut:
apt-get install incron
Proses penginstalan harus serupa dengan yang ada di tangkapan layar ini.
3 Menggunakan Incron
Penggunaan Incron sangat mirip dengan penggunaan cron. Anda memiliki perintah incrontab yang memungkinkan Anda membuat daftar (-l), mengedit (-e), dan menghapus (-r) entri incrontab.
Untuk mempelajari lebih lanjut tentangnya, lihat:
man incrontab
Di sana Anda juga menemukan bagian 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.
Ini berarti jika kita ingin menggunakan incrontab sebagai root, kita harus menghapus /etc/incron.allow (yang tidak aman karena setiap pengguna sistem dapat menggunakan incrontab)...
rm -f /etc/incron.allow
... atau tambahkan root ke file itu (disarankan). Buka file /etc/incron.allow dengan nano:
nano /etc/incron.allow
Dan tambahkan baris berikut. Kemudian simpan file tersebut.
root
Sebelum Anda melakukan ini, Anda akan mendapatkan pesan kesalahan seperti ini saat mencoba menggunakan incrontab:
server1:~# incrontab -l
pengguna 'root' tidak diizinkan menggunakan incron
Setelah itu berfungsi:
server1:~# incrontab -l
tidak ada tabel untuk root
Kita bisa menggunakan perintah:
incrontab -e
Untuk membuat pekerjaan incron. Sebelum kita melakukan ini, kita lihat halaman manual incron:
man 5 incrontab
Halaman manual menjelaskan format crontab. Pada dasarnya, formatnya adalah sebagai berikut...
...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 set 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. Wildcard 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 pekerjaan incron seperti ini. Buka incron incrontab:
incrontab -edan tambahkan baris berikut:
/tmp/ IN_MODIFY echo "$$ [dilindungi email] $# $% $&"Kemudian Anda membuat atau memodifikasi file di direktori /tmp dan lihat /var/log/syslog - log ini menunjukkan kapan tugas incron dipicu, jika berhasil atau jika ada kesalahan, dan apa perintah sebenarnya itu itu dieksekusi (yaitu, wildcard diganti dengan nilai sebenarnya).
ekor /var/log/syslog...
10 Jan 13:52:35 server1 incrond[1012]:(root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
10 Jan 13 :52:36 server1 incrond[1012]:(root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
10 Jan 13:52:39 server1 incrond[1012]:(root) CMD (echo "$ /tmp hello.txt IN_MODIFY 2")
10 Jan 13:52:39 server1 incrond[1012]:(root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2" )Dalam contoh ini saya telah mengedit file /tmp/hello.txt; seperti yang Anda lihat [email protected] diterjemahkan menjadi /tmp, $# menjadi hello.txt , $% hingga IN_CREATE, dan $&hingga 256. Saya menggunakan editor yang membuat file .txt.swp sementara yang menghasilkan baris tambahan di syslog.
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 tugas 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 ulangUntuk menghapus semua tugas incron dari pengguna saat ini, jalankan:
incrontab -rserver1:~# incrontab -r
menghapus tabel untuk 'root' pengguna
tabel untuk 'root' pengguna berhasil dihapus4 Tautan
- Debian http://www.debian.org
- Perangkat Lunak Incron:http://inotify.aiken.cz/?section=incron&page=about&lang=en