bash - użycie inotify dla aktywacji skryptu po dodaniu plików do katalogu

Potrzebujesz pomocy z C, C++, perl, python, itp.
Serantor
Posty: 7
Rejestracja: 19 kwietnia 2010, 14:50

bash - użycie inotify dla aktywacji skryptu po dodaniu plików do katalogu

Post 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.
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Jest coś takiego jak incron. Sprawdź, może Ci się przyda.
Serantor
Posty: 7
Rejestracja: 19 kwietnia 2010, 14:50

Post 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ć?
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post 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)
Serantor
Posty: 7
Rejestracja: 19 kwietnia 2010, 14:50

Post 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
Załączniki
1zzhx0h..jpg
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post 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 $#
Serantor
Posty: 7
Rejestracja: 19 kwietnia 2010, 14:50

Post 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?
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post 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ź.
Serantor
Posty: 7
Rejestracja: 19 kwietnia 2010, 14:50

Post 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
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Chłopie ;) Otwórz sobie terminal, wpisz polecenie:

Kod: Zaznacz cały

incrontab -e
Otworzy Ci się okno edytora w którym wpisz polecenie incron'a. A z tym przekazywaniem parametrów, to waść coś kombinujesz bardzo.
ODPOWIEDZ