GNU/Linux >> Belajar Linux >  >> Ubuntu

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

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  adalah direktori atau file. Harap perhatikan bahwa incron tidak dapat menonton file di subdirektori dari direktori yang telah Anda setel, jadi hanya file di direktori tersebut yang akan diamati.

dapat menjadi salah satu opsi berikut:

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 dengan apa terjemahannya, Anda dapat membuat tugas incron seperti ini.

Buat direktori yang akan diawasi:

mkdir /tmp/testdir

Kemudian buka incrontab:

incrontab -e

dan 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.txt

Jadi 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 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 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 -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:~#

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

Ubuntu
  1. Cara Menjalankan Program Hadoop MapReduce di Ubuntu 16.04

  2. Bagaimana Mengubah Direktori Kerja Saat Membuka File Dengan Mengklik Dua Kali Di Desktop Ubuntu?

  3. Bagaimana cara menjalankan skrip Shell ketika file atau direktori berubah?

  1. Cara Menginstal Go di Ubuntu 20.04

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

  3. Cara Menginstal File deb di Ubuntu (dengan Contoh)

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

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

  3. Cara Melindungi file Zip dengan Kata Sandi di Ubuntu 18.04 LTS