Portál AbcLinuxu, 6. května 2025 09:21
Ř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?
$@/$#
. Diky
Jen pro informaci. Nakonec jsem nasadil watcher .. incron
totiz neumi pracovat rekruzivne, takre uninstall. Skriptiky jsem ponechal a predhodil jsem je watcher
u. 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 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}
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() OSErrorTo 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 $filename
command=/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?
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/kuk
mv 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 umount
sleep 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 …
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.