Strona 1 z 2
bash - użycie inotify dla aktywacji skryptu po dodaniu plików do katalogu
: 19 kwietnia 2010, 15:00
autor: Serantor
Na wstępie chciałbym zaznaczyć, że jestem bardzo początkującym użytkownikiem Linuksa dlatego proszę o łopatologiczne tłumaczenie.
Chciałbym uruchamiać skrypt pakujący i wysyłający pliki na serwer dla każdego nowo pojawiającego się pliku a określonej lokalizacji. Skrypt może ,,obsługiwać'' tylko jeden plik jednocześnie, dlatego w przypadku pojawienia się kilku musi być uruchamiany dla każdego osobno.
Na jednym z kanałów dowiedziałem się, że można to zrobić za pomocą inotify lub dnotify, niestety nie udało mi się znaleźć informacji jak, a jedyne co wyszperałem to opcja, dzięki której osiągnę cel, czyli IN_CREATE.
Z góry dziękuję za pomoc.
: 19 kwietnia 2010, 15:48
autor: lessmian2
Jest coś takiego jak
incron. Sprawdź, może Ci się przyda.
: 19 kwietnia 2010, 16:11
autor: Serantor
Dziękuję, to prawie rozwiązuje mój problem.
Kod: Zaznacz cały
incrontab -e
/home/[b]użytkownik[/b]/folder/ IN_CREATE sh /home/[b]użytkownik[/b]/skrypt.sh
Jeśli dobrze patrzyłem tak powinna wyglądać ta komenda, jednak do pełnego sukcesu brakuje przekazania pełnej nazwy pliku dodanego do /home/
użytkownik/folder/ do zmiennej w skrypcie skrypt.sh. Jak to zrobić?
: 19 kwietnia 2010, 18:53
autor: lessmian2
Zgodnie z
dokumentacją:
Kod: Zaznacz cały
* $$ - a dollar sign
* $@ - the watched filesystem path (see above)
[b]* $# - the event-related file name[/b]
* $% - the event flags (textually)
* $& - the event flags (numerically)
: 19 kwietnia 2010, 19:32
autor: Serantor
Przeczytałem całą dokumentację i nie mogę poradzić sobie z tym incronem.
Plik wygląda tak:
Kod: Zaznacz cały
#!/bin/bash
incrontab -e
/home/[b]użytkownik[/b]/katalog/ IN_CREATE sh /home/[b]użytkownik[/b]/skrypt.sh
Po odpaleniu tego pokazuje mi się okienko i nie mam pojęcia co zrobić dalej.
Załącznik 1zzhx0h..jpg nie jest już dostępny
: 19 kwietnia 2010, 19:37
autor: lessmian2
Po opaleniu czego pokazuje Ci się to okno?
Nazwę pliku masz pod zmienną
$#, więc polecenie powinno wyglądać np. tak:
Kod: Zaznacz cały
/home/[b]użytkownik[/b]/katalog/ IN_CREATE sh /home/[b]użytkownik[/b]/skrypt.sh $#
: 19 kwietnia 2010, 19:47
autor: Serantor
Okno pokazuje się po odpaleniu pliku ze skryptem, którego treść wpisałem.
Ale ja tą nazwę pliku ,który pojawi się w /home/user/katalog potrzebuję przenieść do pliku /home/użytkownik/skrypt.sh
Jedyne co zrobiłem to zainstalowanie incron i dodanie siebie do incron.allow, może jakiś błąd w konfiguracji?
: 19 kwietnia 2010, 20:03
autor: lessmian2
Ale, że jak ma się nazwa pliku przenieść do skryptu? Piszesz skrypt tak, aby przyjmował nazwę pliku jako parametr podawany podczas wywołania, a nie deklarujesz bezpośrednio w skrypcie. Chyba, że źle zrozumiałem Twoją ostatnią wypowiedź.
: 19 kwietnia 2010, 20:11
autor: Serantor
Mam plik test.sh, jego zawartość:
Kod: Zaznacz cały
#!/bin/bash
incrontab -e
/home/[b]użytkownik[/b]/katalog/ IN_CREATE sh /home/[b]użytkownik[/b]/skrypt.sh $#
I drugi skrypt.sh, w którym potrzebna mi nazwa nowo dodanego pliku.
Na razie potrzebuję uruchomienia incron, jeśli nazwa dodanego pliku zapisuje się w zmiennej $# to zapiszę ją sobie do innego pliku i potem odczytam w skrypt.sh
: 19 kwietnia 2010, 20:15
autor: lessmian2
Chłopie

Otwórz sobie terminal, wpisz polecenie:
Otworzy Ci się okno edytora w którym wpisz polecenie
incron'a. A z tym przekazywaniem parametrów, to waść coś kombinujesz bardzo.