Konyvtar figyelese es figyelmeztetes ha a tartalom valtozik

Sziasztok,

van egy samba megosztasunk, amiben par fajl van elhelyezve. Letezik-e olyan program, amelyik emailt kuld, ha a fajlokat szerkesztettek (pl. meretuk valtozott) vagy ujakat hoztak letre? Legkenyelmesebb az lenne, ha egy adott konyvtartol lefele figyelne a konyvtartartalmakat es ha valaki pl felmasol vagy szerkeszt valamit, akkor kuld egy figyelmeztetot.

Koszonom
d

Hozzászólások

Az inotify alapú eszközök között keresgélj. Például ilyen az incron.

Az incron mukodik, annyi gondom van, hogy a figyelmezteto email negy peldanyban jon meg.

incrontab:
/konvtar1/konyvtar2/ IN_MODIFY mail -s targy email_cim_2
alternativa:
/konyvtar1/konyvtar2/ IN_MODIFY /home/user/mail
ennek a tartalma: echo "szoveg" | mail -s targy email_cim_2

Ha parancssorbol kuldok emailt, ugy minden gond nelkul mukodik a dolog, a /home/user/mail szkript is lefut, de mihelyt beteszem az incrontabba, a levelet negyszer kapom meg.

A /konyvtar1/konyvtar2-ben levo fajl szerkesztesekor a kovetkezo bejegyzes jon letre a maillogban:
link.

Valaki tudna segiteni?

--
[citation needed]

Azzal is probaltam, de most 6 emailt kaptam. Hogy oszinte legyek, nem latom a kulonbseget az in_modify es in_close_write kozott.

vimmel es libreoffice-szal probaltam szerkeszteni, de az emailek szama ugyanannyi akar in_modify, akar in_close_write van az incrontabban.

szerk: ugy tunik, ha csak megnyitom a fajlt, akkor jon az elso. Ha szerkesztem es mentem, akkor negy, ha kilepek, akkor megint egy. Ha csak megnyitom es bezarom, akkor ketto jon (egy megnyitaskor, egy ha bezarom). Bug?

--
[citation needed]

Ideiglenes file-ok. Például a vim-nél .swp és .swpx.

Íme:


# strace -s 150 vim /tmp/proba/a 2>/tmp/vimstrace ; egrep '^open\("/tmp/proba' /tmp/vimstrace
open("/tmp/proba/a", O_RDONLY)          = 3
open("/tmp/proba/.a.swp", O_RDONLY)     = -1 ENOENT (No such file or directory)
open("/tmp/proba/.a.swp", O_RDWR|O_CREAT|O_EXCL, 0600) = 4
open("/tmp/proba/.a.swpx", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/tmp/proba/.a.swpx", O_RDWR|O_CREAT|O_EXCL, 0600) = 5
open("/tmp/proba/.a.swp", O_RDWR|O_CREAT|O_EXCL, 0600) = 4
open("/tmp/proba/a", O_RDONLY)          = 3
open("/tmp/proba/a", O_WRONLY|O_CREAT|O_TRUNC, 0644) = 3
#

És éppen négy, ahogy mondtad.

Makacs dolog ez. Most az incrontabban ez van:

/konyvtar1/konyvtar2/ IN_CLOSE_WRITE touch /konyvtar1/tmp/a
/konyvtar1/tmp/ IN_CREATE szkript

A szkript ket sora:
echo "szoveg" | mail -s "targy" emailcim
rm /konyvtar1/tmp/a

Sajna igy is negy email megy ki. Az rm sor nelkul csak egyszer, de akkor a kovetkezo alkalommal mar ugye nem kuld levelet. Van valami egyszeru megoldas, hogy csak egy email menjen ki?

--
[citation needed]

Az előbbi írás arról szólt, hogy ha a vim egy file szerkesztésekor 3 file-t ír 4 megnyitás alatt, akkor természetszerűleg 4-szer fog az IN_CLOSE_WRITE lefutni. Ha például az ideiglenes file-okra nem akarsz levet küldeni, akkor egyszerűen egy feltétvizsgálat kell, hogy a filenév illeszkedik-e mondjuk a '^\.' mintára. Egyébként egyszerűbben megfognád a dolgot, ha a levél tárgyába beletennéd a módosított file nevét, és máris látnád, hogy miket kell még a feltételvizsgálatba bevenni.

"akkor is 4 megy ki."
Pontosan mikor? Milyen parancsot adsz ki, amikor egy file-t szerkesztesz?

"Elvileg feltetelvizsgalat sem kellene"
Akkor viszont elfogadod azt, hogy a "vi probafile" parancsra meg fogja nyitni a "probafile"-t, a ".probafile.swp" és a ".probafile.swpx" file-okat, és ezekről mindegyik írásakor (IN_MODIFY) vagy lezárásakor (IN_CLOSE_WRITE) levelet fogsz kapni, szám szerint négyet, ahogy a fenti strace kiementben látod. A feltételvizsgálattal kiszűrhetnéd az ideiglenes file-okról (".probafile.swp" és a ".probafile.swpx") szóló leveleket. De ha nem szeretnél a filenévre feltételvizsgálatot,akkor miért baj, hogy négy? Ennyiszer ír (IN_MODIFY) vagy zár be (IN_CLOSE_WRITE) a vim.

Kipróbáltam, és nálam teljesen jól működik:


# cat /etc/incron.d/proba
/tmp/proba IN_MODIFY /tmp/incronscript $@ $#
#

# cat /tmp/incronscript
#!/bin/bash

[[ ! "$2" =~ ^\..+ ]] && [[ ! "$2" =~ ^.+~$ ]] && /usr/bin/mail -s "$1"/"$2" cimzett@mail.cime <<EOF
$1/$2 megvaltozott
EOF
#

Eseménygyűjtés.

Amikor az első esemény történik, akkor valami file touch-olással jelzed ezt.
De nem küldesz rögtön mailt. Hanem majd csak akkor, ha egy egész másodpercen keresztül nem volt több touch.
Ez meg lehet úgy csinálni, hogy egy script folyamatosan nézi ezt a touch-olós könyvtárat (közben sleep 1), és ha kétszer egymás után ugyanaz a timestamp a touch file-on, akkor nem változott legalább 1 másodperce (az 1 emelhető, lehet az 2-3-4-5 is). Na akkor lehet levelet küldeni.

Esetleg egy script, ami letarolja a legutobb kikuldott md5sum-jat, es legkozelebb megnezi, hogy azonos-e azzal. Ha azonos, akkor csak megnyitottak, de nem modosult, felesleges mailt kuldeni.

--
Az emberek azt állítják, hogy múlik az idő, az idő viszont csak mosolyog, mert látja, hogy az emberek múlnak. - tibeti közmondás