Kirjoittaja Aihe: Saako keskeytyksen ajettua, kun tiedosto tulee tiettyyn kansioon? [Ratkaistu]  (Luettu 3452 kertaa)

kamara

  • Käyttäjä
  • Viestejä: 3026
    • Profiili
Minulla on kansio, jota pollaan crontab:lla. Kun kansioon tulee tiedosto, niin tulostan sen.

Saako tämän tehtyä nopeammaksi, kuin crontab:lla ?

Tavoitteena on tulostaa sekä Ubuntulla että Androidilla.

Tällähetkellä on seuraavat säädöt ...
Ubuntu asiakkaalla...
Koodia: [Valitse]
alias
alias tulosta='/home/xxx/tulosta.sh '
cat /home/xxx/tulosta.sh
#!/bin/bash
scp $1 xxx@192.168.11.104:/home/xxx/runttaaulos/.

Ubuntupalvelimella:
Koodia: [Valitse]
$ cat /etc/crontab
...
* * * * * xxx       /bin/bash -c "/home/xxx/getlist.sh"
#

$ cat /home/xxx/getlist.sh
#!/bin/bash
cd /home/xxx/runttaaulos
for i in $( ls ); do
/home/xxx/getfilesizes.sh "$i"
        echo item: $i
sleep 10
/home/xxx/getfilesizes.sh "$i"
done

$ cat getfilesizes.sh
#!/bin/bash
cd /home/xxx/runttaaulos
FILENAME=$1
FILESIZE=$(stat -c%s "$FILENAME")
echo "$FILESIZE"
touch /home/xxx/runttaus/$FILENAME
oldfilesize=`cat /home/xxx/runttaus/$FILENAME`
if [ $FILESIZE -gt 0 ];then
echo "koko>0";
if [ $oldfilesize -eq $FILESIZE ]; then
mv "/home/xxx/runttaaulos/$FILENAME" /home/xxx/runtsizes/.
cd /home/xxx/runtsizes/.
if [  ${FILENAME: -4}  == ".pdf" ]
then
echo "On jo pdf"
lp $FILENAME
rm $FILENAME
else
if [  ${FILENAME: -3}  == ".ps" ]
then
echo "On jo ps"
lp $FILENAME
rm $FILENAME
else
convert -density 300 $FILENAME  -density 300 $FILENAME.pdf
rm $FILENAME
lp $FILENAME.pdf
rm $FILENAME.pdf
fi
fi
rm  /home/xxx/runttaus/$FILENAME
else
echo "$FILESIZE" > /home/xxx/runttaus/$FILENAME
fi
else
echo "$FILESIZE"  > /home/xxx/runttaus/$FILENAME
fi

Yksinkertaisesti: Haluaisin ajaa getlist.sh:n, kun tiedosto on tallentunut runttaaulos-kansioon. Scriptikoodi on gpl:llää.
« Viimeksi muokattu: 08.11.15 - klo:12.55 kirjoittanut kamara »

petteriIII

  • Käyttäjä
  • Viestejä: 693
    • Profiili
Ratkaisu ehkä löytyy komennosta watch: http://ss64.com/bash/watch.html. Siellä on puhuttu juuri tuosta kansio-muutoksesta.

kamara

  • Käyttäjä
  • Viestejä: 3026
    • Profiili
Ratkaisu ehkä löytyy komennosta watch: http://ss64.com/bash/watch.html. Siellä on puhuttu juuri tuosta kansio-muutoksesta.

Kiitoksia paljon. Se nopeutti toimintaa.

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11480
    • Profiili
    • Tomin kotisivut
Tähän voisi käyttää myös inotifyä. https://en.wikipedia.org/wiki/inotify
Paketista inotify-tools löytyy inotifywait, jolla saa esimerkiksi pysäytettyä skriptin kunnes hakemistoon luodaan tiedosto. Se voi olla tietty tiedosto tai mikä tahansa tiedosto.
https://github.com/rvoicilas/inotify-tools/wiki
« Viimeksi muokattu: 08.11.15 - klo:11.45 kirjoittanut Tomin »
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

kamara

  • Käyttäjä
  • Viestejä: 3026
    • Profiili
Tähän voisi käyttää myös inotifyä. https://en.wikipedia.org/wiki/inotify
Paketista inotify-tools löytyy inotifywait, jolla saa esimerkiksi pysäytettyä skriptin kunnes hakemistoon luodaan tiedosto. Se voi olla tietty tiedosto tai mikä tahansa tiedosto.
https://github.com/rvoicilas/inotify-tools/wiki

Kiitoksia paljon uudestaan.
Itse asiassa tämä Tominin antama ehdotus taitaa olla juuri sellainen ohjelma, kuin toivoin löytäväni.

Tosin en jaksa vielä tutustua siihen tarkemmin.

Storck

  • Vieras
Jos ratkennut niin aloitusviestin otsikkoon [RATKAISTU] niin muutkin näkee että apu on löytynyt.  8)

kamara

  • Käyttäjä
  • Viestejä: 3026
    • Profiili
Jos ratkennut niin aloitusviestin otsikkoon [RATKAISTU] niin muutkin näkee että apu on löytynyt.  8)

Kiitos muistutuksesta. Tosin tuota Tominin ehdotusta en ole vielä kerennyt testata.

kamara

  • Käyttäjä
  • Viestejä: 3026
    • Profiili
Erityiskiitokset Tomin:lle.

Ratkaisuni on siis seuraava:
Koodia: [Valitse]
$ cat getlist.sh
#!/bin/bash
cd /home/xxx/runttaaulos
inotifywait -m --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e close_write . | while read date time dir file; do echo "Item: ${dir}${file}";ls -l ${dir}${file}; /home/xxx/getfilesizes.sh "${file}"; done

$ cat getfilesizes.sh
#!/bin/bash
cd /home/xxx/runttaaulos
FILENAME=$1
FILESIZE=$(stat -c%s "$FILENAME")
echo "$FILESIZE"
if [ $FILESIZE -gt 0 ];then
echo "koko>0";
mv "/home/xxx/runttaaulos/$FILENAME" /home/sami/runtsizes/.
cd /home/xxx/runtsizes/.
if [  ${FILENAME: -4}  == ".pdf" ]
then
echo "On jo pdf"
lp $FILENAME
rm $FILENAME
else
if [  ${FILENAME: -3}  == ".ps" ]
then
echo "On jo ps"
lp $FILENAME
rm $FILENAME
else
convert -density 300 $FILENAME  -density 300 $FILENAME.pdf
rm $FILENAME
lp $FILENAME.pdf
rm $FILENAME.pdf
fi
fi
rm  /home/xxx/runttaus/$FILENAME
else
echo "$FILESIZE"  > /home/xxx/runttaus/$FILENAME
fi

$ cat ~/.config/lxsession/Lubuntu/autostart
/usr/bin/lxterminal -e /bin/bash -c "/home/xxx/getlist.sh "

Siis palvelimessa kyseessä Lubuntu-variantti. Lisenssi koodille on edelleen GPL:ää.