Portál AbcLinuxu, 21. listopadu 2025 15:39
Řešení dotazu:
setfacl -m d:u:franta:rwx /dir
IN_MOVED_TO, kdyz chci, aby se zmenila prava souborum presunutym do adresare (v syslogu se neobjevi ani spusteni incronu). testoval jsem IN_CREATE a to funguje.
Mam tam tohle
/FILMY IN_MOVE_TO /bin/chmod 0777 $@/$#
IN_CLOSE_WRITE. Jak mam ale nastavit, aby pri presunu do toho hlidaneho adresare mely vsechny soubory prava 0770 a soubory 0660?
/bin/chmod 0660 soubor && chown user:filmy souborJak to zapisu?
$# by měl být soubor, kterého se daná událost týká. Takže bych zkusil
/bin/chmod 0660 $# chown user:filmy $#
&&, ale vysledek prakticky zadny
/muj/sledovany/files on_neco,on_neco /usr/local/bin/mujskript '$#'(těmi apostrofy si nejsem jistý…)
chmod 666 "$1" chown kubrt "$1"Odzkoušel bych první v tom skriptu:
echo "$1" > /tmp/kuka co bude v kuk to je předáno jako parametr, nevím jestli $# je včetně cesty…
./mujscript prenaseny_soubor, vystup je takovyto:
/bin/chown: nelze přistoupit k „“: Adresář nebo soubor neexistuje
chown).. on to nema totiz kam aplikovat, kdyz ten prenaseny_soubor je uz pryc ... jak to ale resit?
Takto je to dobre (tj. vc. cesty) $@/$#. Diky
Jen pro informaci. Nakonec jsem nasadil watcher .. incron totiz neumi pracovat rekruzivne, takre uninstall. Skriptiky jsem ponechal a predhodil jsem je watcheru. Ted je to dokonaly.
incron:/moje/cesta IN_ALL_EVENTS /usr/local/bin/mujskript $@ $# $% $&mujskript:
outfiles=/root/kuk
echo " cesta: $1" >> ${outfiles}
echo " nazev: $2" >> ${outfiles}
echo " udalost-text: $3" >> ${outfiles}
echo "udalost-cislo: $4" >> ${outfiles}
echo '----------------------------------' >> ${outfiles}
A uvidíte co se děje v rostoucím 'kuk' filesu…$@/$#, vždyť je to i v ukázkovém příkladu - nějak jsem to přehlédl…
ssh a taky to nefunguje
Tzn. zkopiroval jsem do "hlidaneho" adresare soubor pres ssh a prava se mi nazmenila..
events=all command=/usr/local/bin/mujskript $watched $filename $tflags $nflagsmujskript:
outfiles=/root/kuk
echo '----------------------------------' >> ${outfiles}
echo " cesta: $1" >> ${outfiles}
echo " nazev: $2" >> ${outfiles}
echo " udalost-text: $3" >> ${outfiles}
echo "udalost-cislo: $4" >> ${outfiles}
echo '----------------------------------' >> ${outfiles}
co potrebuju je jasne predpokladam
Takze mam zase nainstalovat incron? Bude tenhle test k necemu dobry, kdyz incron (diky tomu, ze neumi pracovat recursivne) pouzivat stejne nebudu?
…
Ted mam nastaveny watcher takhle:
[job1] watch=/shares/FOTKY events=create,move_to recursive=true command=/usr/local/scripts/shares-perm/fotky-perm $filename
/shares/FOTKY jsou na lokalnim disku serveru, kde bezi watcher. Kdyz nakopiruju soubor/adresar v ramci serveru (i z jineho diskoveho oddilu), skript zmeni prava. Kdyz ale nakopiruju soubor/adresar do /shares/FOTKY pomoci ssh nebo nfs z jineho pc, skript se nespusti.
Je to srozumitelne?
events=all, tak v logu mam spoustu techto hlasek:
Exception in thread Thread-185:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
self.run()
File "/usr/lib/pymodules/python2.6/pyinotify.py", line 1348, in run
self.loop()
File "/usr/lib/pymodules/python2.6/pyinotify.py", line 1334, in loop
self.process_events()
File "/usr/lib/pymodules/python2.6/pyinotify.py", line 1128, in process_events
self._default_proc_fun(revent)
File "/usr/lib/pymodules/python2.6/pyinotify.py", line 810, in __call__
return _ProcessEvent.__call__(self, event)
File "/usr/lib/pymodules/python2.6/pyinotify.py", line 544, in __call__
return meth(event)
File "/etc/init.d/watcher", line 257, in process_IN_OPEN
self.runCommand(event)
File "/etc/init.d/watcher", line 213, in runCommand
prefix)
File "/etc/init.d/watcher", line 290, in addWatch
wm = pyinotify.WatchManager()
File "/usr/lib/pymodules/python2.6/pyinotify.py", line 1530, in __init__
raise OSError()
OSError
Exception in thread Thread-221:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
self.run()
File "/usr/lib/pymodules/python2.6/pyinotify.py", line 1348, in run
self.loop()
File "/usr/lib/pymodules/python2.6/pyinotify.py", line 1334, in loop
self.process_events()
File "/usr/lib/pymodules/python2.6/pyinotify.py", line 1128, in process_events
self._default_proc_fun(revent)
File "/usr/lib/pymodules/python2.6/pyinotify.py", line 810, in __call__
return _ProcessEvent.__call__(self, event)
File "/usr/lib/pymodules/python2.6/pyinotify.py", line 544, in __call__
return meth(event)
File "/etc/init.d/watcher", line 257, in process_IN_OPEN
self.runCommand(event)
File "/etc/init.d/watcher", line 213, in runCommand
prefix)
File "/etc/init.d/watcher", line 290, in addWatch
wm = pyinotify.WatchManager()
File "/usr/lib/pymodules/python2.6/pyinotify.py", line 1530, in __init__
raise OSError()
OSError
To nevim, jestli je dobre nebo spatne.
/usr/local/bin/mujskript
chown root:root /usr/local/bin/mujskript
chmod 700 /usr/local/bin/mujskript
command=/usr/local/scripts/shares-perm/fotky-perm $filenamecommand=/usr/local/bin/mujskript $watched $filename $tflags $nflags
events=create,move_to na events=all
/root/kuk uvidíte co se děje, třeba cat /root/kuk
create(což bych ignoroval) a pak write_close, ale chce to vyzkoušet co to dělá při přejmenování, move-ntutí či zkopírování (v rámci sdílení, či odjinud).all mělo fungovat.kuk se prave nic neobjevi.
events=all, tak je to smůla a ta informace (event) není vyvolána, takže s tím tímto způsobem asi nic neuděláte.
mv a copy na tom lokalnim serveru?
, nevím jestli tam máte 'all' a jestli je tato konfigurace přenačtena.sync.
sudo exportfs /share/test 192.168.1.2server:
grep -ov '#' /etc/exports /share/test 192.168.1.2(rw,sync,rw,sync,no_subtree_check)server:
sudo incrontab -l/share/test IN_ALL_EVENTS /usr/local/bin/mujskript $@ $# $% $&client (na root-a):
mkdir bubuntunfs chmod 777 ./bubuntunfs mount -o 'vers=3' -t nfs 192.168.1.129:/share/test ./bubuntunfs touch ./mv-nfs-share-file mv mv-nfs-share-file bubuntunfs/ sudo cat /root/kuk cesta: /share/test
nazev: mv-nfs-share-file
udalost-text: IN_CREATE
udalost-cislo: 256
----------------------------------
cesta: /share/test
nazev: mv-nfs-share-file
udalost-text: IN_ATTRIB
udalost-cislo: 4
----------------------------------
cesta: /share/test
nazev: mv-nfs-share-file
udalost-text: IN_ATTRIB
udalost-cislo: 4
----------------------------------
cesta: /share/test
nazev: mv-nfs-share-file
udalost-text: IN_ATTRIB
udalost-cislo: 4
----------------------------------
cesta: /share/test
nazev: mv-nfs-share-file
udalost-text: IN_ATTRIB
udalost-cislo: 4
----------------------------------
server: sudo rm /root/kukmv bubuntunfs/mv-nfs-share-file ./sudo cat /root/kuk
cesta: /share/test
nazev: mv-nfs-share-file
udalost-text: IN_DELETE
udalost-cislo: 512
----------------------------------
... a pak na root-a umountsleep 3 && chmod…, což má ovšem také svá úskalí.$myPath=/cesta/tam/kam/chci
myGroup='mojeskupina'
myPermFile=660
myPermDir=2770
find "$myPath" ! -group "$myGroup" -exec chgrp "$MyGroup" {} \;
find "$myPath" -type f ! -perm $myPermFile -exec chmod $myPermFile {} \;
find "$myPath" -mindepth 1 -type d ! -perm $myPermDir -exec chmod $myPermDir {} \;
díky hledání jen neodpovídajících nastavení, jsou většinou změny malé...
…odzkoušejte postupně a používejte man - nevěřte mi
myPath=/cesta/tam/kam/chci …
Zeptam se blbe.. nestaci tam pridat jen prametr IN_ATTRIB? Jak by se to chovalo? Muzu tim neco zkazit?
incron tam lze použít IN_NO_LOOP, tím pádem by to šlo.
sleep 3 &&. Bohuzel se mi skripty neaplikuji. Bohuzel se mi prava nezmeni v pripade, kdyz nakopiruju adresar s obsahem. Na ten jeho obsah (soubory v nem) se prava neaplikuji. Pouzivam ten watcher protoze pracuje recursivne. Funguje mi, kdyz nakopiruju prazdny adresar a teprve pak jeho souborovy obsah - to se skript aplikuje a v mem propade se prava zmeni. Pritom jsem to overoval tim kuk souborem a system mi hlasi, ze soubory byly vytvoreny IN_CREATE - kdyz kopiruju adresar se souborovym obsahem. Jakto?
)
all tam mam nastaveno. sync jsem nezkusil, nejdrive se musim podivat, k cemu vubec je
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.