GNU/Linux >> Belajar Linux >  >> Debian

Cara memicu perintah pada perubahan File/Direktori dengan Incron di Debian 8

Panduan ini menunjukkan cara menginstal dan menggunakan incron pada sistem Debian 8 (Jessie). 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 di 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 diperbolehkan menggunakan incron
server1:~#

Setelah itu berfungsi:

server1:~# incrontab -l
tidak ada tabel untuk root
server1:~#

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 dapat berupa direktori (artinya direktori dan/atau file langsung di direktori tersebut (bukan file dalam subdirektori dari direktori itu!) yang diawasi) atau file.

dapat berupa salah satu dari berikut ini:

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 saja

Selain 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 apa yang mereka terjemahkan, Anda dapat membuat pekerjaan incron seperti ini. Buka incron incrontab:

incrontab -e

dan 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
...
16 Sep 10:14:35 server1 incrond[1199]:(root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
16 Sep 10 :14:36 ​​server1 incrond[1199]:(root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
16 Sep 10:14:39 server1 incrond[1199]:(root) CMD (echo "$ /tmp hello.txt IN_MODIFY 2")
16 Sep 10:14:39 server1 incrond[1199]:(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 restart

Itu 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 -l
server1:~# 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 -r
server1:~# incrontab -r
menghapus tabel untuk 'root' pengguna
tabel untuk 'root' pengguna berhasil dihapus
server1:~#

  • Debian http://www.debian.org
  • incron:http://inotify.aiken.cz/?section=incron&page=about&lang=en

Debian
  1. Cara Mengenkripsi direktori dengan EncFS di Debian 9 Stretch Linux

  2. Cara mengubah izin file dan direktori dengan Manajer File

  3. Bagaimana cara menyalurkan perintah bersama dalam file preseed debian?

  1. Cara Mengatur Situs Web Berbagi File dengan Jirafeau di Debian 10

  2. Cara menjalankan perintah pada perubahan File atau Direktori dengan Incron di Ubuntu

  3. Cara memindai server Debian untuk rootkit dengan Rkhunter

  1. Cara Mengatur Firewall dengan UFW di Debian 10

  2. Cara Menginstal Go di Debian 9

  3. Memicu Perintah Pada Perubahan File/Direktori Dengan Incron di Debian Etch