Questa guida mostra come installare e utilizzare incron su un sistema Debian 9 (Stretch). Incron è simile a cron, ma invece di eseguire comandi in base al tempo, può attivare comandi quando si verificano eventi di file o directory (ad es. una modifica del file, modifiche dei permessi, ecc.).
1 Prerequisiti
- Autorizzazioni di amministratore di sistema (accesso root). Tutti i comandi in questo tutorial devono essere eseguiti come utente root sulla shell.
- Utilizzerò l'editor "nano" per modificare i file. Puoi sostituire nano con un editor a tua scelta o installare nano con "apt-get install nano" se non è installato sul tuo server.
2 Installazione di Incron
Incron è disponibile nel repository Debian, quindi installiamo incron con il seguente comando apt:
apt-get install incron
Il processo di installazione dovrebbe essere simile a quello in questo screenshot.
3 Utilizzo di Incron
L'utilizzo di Incron è molto simile all'utilizzo di cron. Hai il comando incrontab che ti consente di elencare (-l), modificare (-e) e rimuovere (-r) le voci incrontab.
Per saperne di più, vedere:
man incrontab
Lì trovi anche la seguente sezione:
Se /etc/incron.allow esiste solo gli utenti elencati qui possono usare incron. Altrimenti se /etc/incron.deny esiste solo gli utenti NON elencati qui possono usare incron. Se nessuno di questi file esiste, tutti possono usare incron. (Nota importante:questo comportamento non è sicuro e sarà probabilmente modificato per essere compatibile con lo stile utilizzato da ISC Cron.) La posizione di questi file può essere modificata nella configurazione.
Ciò significa che se vogliamo usare incrontab come root, dobbiamo eliminare /etc/incron.allow (che non è sicuro perché ogni utente del sistema può usare incrontab)...
rm -f /etc/incron.allow
... o aggiungi root a quel file (consigliato). Apri il file /etc/incron.allow con nano:
nano /etc/incron.allow
E aggiungi la riga seguente. Quindi salva il file.
root
Prima di farlo, riceverai messaggi di errore come questo quando proverai a utilizzare incrontab:
server1:~# incrontab -l
user 'root' is not allowed to use incron
Dopo funziona:
server1:~# incrontab -l
no table for root
Possiamo usare il comando:
incrontab -e
Per creare lavori incron. Prima di farlo, diamo un'occhiata alla pagina man di incron:
man 5 incrontab
La pagina man spiega il formato dei crontab. Fondamentalmente, il formato è il seguente...
<path> <mask> <command>
...dove
IN_ACCESS File was accessed (read) (*)
IN_ATTRIB Metadata changed (permissions, timestamps, extended attributes, etc.) (*)
IN_CLOSE_WRITE File opened for writing was closed (*)
IN_CLOSE_NOWRITE File not opened for writing was closed (*)
IN_CREATE File/directory created in watched directory (*)
IN_DELETE File/directory deleted from watched directory (*)
IN_DELETE_SELF Watched file/directory was itself deleted
IN_MODIFY File was modified (*)
IN_MOVE_SELF Watched file/directory was itself moved
IN_MOVED_FROM File moved out of watched directory (*)
IN_MOVED_TO File moved into watched directory (*)
IN_OPEN File was opened (*)
Durante il monitoraggio di una directory, gli eventi contrassegnati da un asterisco (*) sopra possono verificarsi per i file nella directory, nel qual caso il campo del nome nei
dati dell'evento restituito identifica il nome del file all'interno della directory.
Il simbolo IN_ALL_EVENTS è definito come una maschera di bit di tutti gli eventi di cui sopra. Due ulteriori simboli di convenienza sono IN_MOVE, che è una combinazione di IN_MOVED_FROM e IN_MOVED_TO, e IN_CLOSE che combina IN_CLOSE_WRITE e IN_CLOSE_NOWRITE.
Nella maschera possono essere specificati i seguenti ulteriori simboli:
IN_DONT_FOLLOW Don't dereference pathname if it is a symbolic link
IN_ONESHOT Monitor pathname for only one event
IN_ONLYDIR Only watch pathname if it is a directory
Inoltre, c'è un simbolo che non appare nel set di simboli inotify. È IN_NO_LOOP. Questo simbolo disabilita il monitoraggio degli eventi finché quello corrente non viene completamente gestito (fino alla chiusura del processo figlio).
$$ dollar sign
[email protected] watched filesystem path (see above)
$# event-related file name
$% event flags (textually)
$& event flags (numerically)
Se guardi una directory, [email protected] conserva il percorso della directory e $# il file che ha attivato l'evento. Se guardi un file, [email protected] conserva il percorso completo del file e $# è vuoto.
Se hai bisogno dei caratteri jolly ma non sei sicuro di cosa si traducano, puoi creare un lavoro incron come questo. Apri incron incrontab:
incrontab -e
e aggiungi la seguente riga:
/tmp/ IN_MODIFY echo "$$ [email protected] $# $% $&"
Quindi crei o modifichi un file nella directory /tmp e dai un'occhiata a /var/log/syslog:questo registro mostra quando è stato attivato un processo incron, se è riuscito o se ci sono stati errori e quale era il comando effettivo è stato eseguito (ovvero, i caratteri jolly vengono sostituiti con i loro valori reali).
tail /var/log/syslog
...
Jan 10 13:52:35 server1 incrond[1012]: (root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
Jan 10 13:52:36 server1 incrond[1012]: (root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
Jan 10 13:52:39 server1 incrond[1012]: (root) CMD (echo "$ /tmp hello.txt IN_MODIFY 2")
Jan 10 13:52:39 server1 incrond[1012]: (root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
In questo esempio ho modificato il file /tmp/hello.txt; come vedi [email protetta] si traduce in /tmp, $# in hello.txt , $% su IN_CREATE e $&su 256. Ho usato un editor che ha creato un file .txt.swp temporaneo che risulta nelle righe aggiuntive in syslog.
Ora basta teoria. Creiamo i nostri primi lavori incron. Vorrei monitorare il file /etc/apache2/apache2.conf e la directory /etc/apache2/vhosts/, e ogni volta che ci sono modifiche, voglio che incron riavvii Apache. Ecco come lo facciamo:
incrontab -e
/etc/apache2/apache2.conf IN_MODIFY /usr/sbin/service apache2 restart /etc/apache2/sites-available/ IN_MODIFY /usr/sbin/service apache2 restart
Questo è tutto. A scopo di test, puoi modificare la tua configurazione di Apache e dare un'occhiata a /var/log/syslog, e dovresti vedere che incron riavvia Apache.
NOTA :non eseguire alcuna azione all'interno di un processo incron in una directory monitorata per evitare loop. Esempio: Quando controlli la directory /tmp per le modifiche e ogni modifica attiva uno script che scrive un file di registro in /tmp, ciò causerà un ciclo e potrebbe portare il tuo sistema a un carico elevato o addirittura bloccarlo.
Per elencare tutti i lavori incron definiti, puoi eseguire:
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 restart
Per eliminare tutti i lavori incron dell'utente corrente, eseguire:
incrontab -r
server1:~# incrontab -r
removing table for user 'root'
table for user 'root' successfully removed
4 Link
- Debian http://www.debian.org
- Software Incron:http://inotify.aiken.cz/?section=incron&page=about&lang=en