Wpis z mikrobloga

Mircy od #linux i #bash zapytanie takie mam: lata sobie w cronie skrypt, który zagląda do konkretnego folderu i sprawdza czy jest tam plik pdf, jeśli jest to go odpowiednio obrabia. Plik trafia tam z takiego urządzenia wielofunkcyjnego. I teraz zagadnienie takie - mam oczywiście sprawdzanie

if [ -f skan.pdf ]; then ... fi
Okej, a co w przypadku jeśli ten pliczek tam teoretycznie będzie, ale "nie cały" bo ktoś ma widzimisię i będzie skanował powiedzmy 50 stron, co zajmie 20MB i skrypt trafi na moment, gdzie będzie przesłana dopiero np. 1/3 pliku? Czy jest jakieś zabezpieczenie przed czymś takim? Skrypt jest uruchamiany co 3 minuty, więc zakładam, że istnieje ryzyko wystąpienia takiej sytuacji.
#kiciochpyta #skryptowanie
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@OperatorHydrolokator: pozostaje sprawdzać czy plik nie był modyfikowany w ciągu ostatnich np. 60 sekund (czas sobie dobierz doświadczalnie, raczej żadne urządzenie nie przesyła jednak danych rzadziej) i jeżeli nie, to uznać, że przesyłanie się zakończyło, a plik jest w całości.
  • Odpowiedz
@OperatorHydrolokator: skorzystaj z lsof, który pokazuje procesy, które korzystają z pliku. Czyli piszesz:

lsof skan.pdf
i wyświetli ci się lista programów, które teraz otworzyły plik (do odczytu albo do zapisu). Jeżeli w tym momencie żaden program nie czyta ani nie zapisuje tego pliku, to nic się nie wyświetli (i lsof zakończy się exit codem 1). Więc wystarczy w tym skrypcie cronowym zawrzeć coś na wzór:

if lsof skan.pdf >/dev/null; then
  • Odpowiedz