Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: kamara - 07.11.15 - klo:19.11
-
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...
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:
$ 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ää.
-
Ratkaisu ehkä löytyy komennosta watch: http://ss64.com/bash/watch.html. Siellä on puhuttu juuri tuosta kansio-muutoksesta.
-
Ratkaisu ehkä löytyy komennosta watch: http://ss64.com/bash/watch.html. Siellä on puhuttu juuri tuosta kansio-muutoksesta.
Kiitoksia paljon. Se nopeutti toimintaa.
-
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
-
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.
-
Jos ratkennut niin aloitusviestin otsikkoon [RATKAISTU] niin muutkin näkee että apu on löytynyt. 8)
-
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.
-
Erityiskiitokset Tomin:lle.
Ratkaisuni on siis seuraava:
$ 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:ää.