Linux за българи: Форуми

Програмиране => Конкурс bash-майсторът => Темата е започната от: BULFON в Sep 04, 2007, 01:49



Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: BULFON в Sep 04, 2007, 01:49
Задачата е да се напише скрипт/програма (скриптове/програми), които вършат следното нещо:
В дадена директория (указва се в скрипта) могат да се запишат - по ftp, samba, http - торент (.torrent) файлове. Скрипта следи (на всеки 30 сек) за такива файлове, и ако намери, ги премества в друга директория (указва се в скрипта) и пуска ctorrent, за да свали съответния торент файл.
Параметри на скрипта:
start - започва да "наблюдава" директорията
stop - спира "наблюдението"
status - дава информация за броя изпълняващи се задачи (работещи ctorrent клиенти, пуснати от скрипта).
kill - спира "наблюдението" и спира всички ctorrent задачи, пуснати от скрипта.

Важно и съществено допълнение - наградата е бутилка хубаво, бяло вино.





Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: the_real_maniac в Sep 04, 2007, 09:00
Не знам дали тук е мястото за обсъждане на самата тема или само за резултати, но един resume също е не възможен ми зад.

иначе преди изход трябва да ги върща
от поддиректорията, където са преместени обратно в първоначалната , че да ги види следващият път като се пуска, а ctorrent ще види , че продължава задача и няма нужда от доп. игра ;) :)

Иначе resume функц/възможност ще следи поддиректорията, в която трябва да мести дали има нещо , което трябва да се изпълни/довърши ;) :-) :-P :) просто идея :)


Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: BULFON в Sep 04, 2007, 09:37
Отлична идея, но нека остане в екстрите.
Да кажем, че при изпълнени основни условия, ако и това е имплементирано ще има предимство при оценката :)


Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: gat3way в Sep 04, 2007, 10:01
Ще пишете нов afd ? :)


Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: BULFON в Sep 04, 2007, 10:25
Може би трябва да има условие да не е повече от 150 реда код.
А на въпроса - трябват 2 скрипта, а не цяла система за дистрибуция на файлове.


Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: gat3way в Sep 04, 2007, 10:44
А какво става ако скриптът намери в директорията  един файл, който още не е качен целият по ftp например?

Какво ще се случи след като го премести?

Просто ми стана интересно :)


Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: senser в Sep 04, 2007, 12:09
не знам дали съм разбрал напълно идеята, но ми се струва че това, което искаш да постигнеш го има като функционалност в rtorrent

аз го ползвам на една машина без Х и съм много доволен

разгледай в нета за възможните параметри за конфигуриране във файла ".rtorrent.rc" дали ще ти върши работа


Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: BULFON в Sep 04, 2007, 13:20
.rtorrent.rc върши работа. В случая в задачата се говори за торенти, но може примерно да са .sql файлове, които да се вкарват в някоя база, да са статии, които по този начин да се зареждат в опашката на някой CMS, и т.н.

Благодаря за .rtorrent.rc :)





Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: zeridon в Sep 04, 2007, 14:12
Submission :)

следват 2 скрипта и обяснения към тях. Самите скриптове не са нищо особенно като цяло са доста прости и имат супер проста защита от грешки но за сметка на това работят :) а да и се генерализирани за различна употреба

watcher.sh
Примерен код
#!/bin/bash
#
# simple script for watching a dir for new files
# made for BASH Maistora contest
#
# author: vvitkov
# version: 0.1
# date: 04.09.2007
# contact: http://www.getoto.net/az/
# license: CC NC-BY-SA v3.0

## vars
WATCH_DIR="/tmp/watch"
SCAN_TIME="30"
DEST_DIR="/dl/spaceeaters"
PROG_EXEC="ctorrent"
## variable assignment trough command line left for te curious ones :)

while [ 1 ]; do
        # a bit of sanity
        if [ !-d $WATCH_DIR ]; then
                echo "Scan Dir does not exist. FIX THIS!!!"
                exit 1
        fi
        if [ !-d $DEST_DIR ]; then
                echo "Destination Dir does not exist. FIX THIS!!!"
                exit 2
        fi
        #lets go at home
        cd $WATCH_DIR
        # and see if there is something to do
        if [ `ls -1` ]; then
                TMP_VAR=`ls -1`
                # and do our stuff
                for FILE in $TMP_VAR; do
                        cd $WATCH_DIR
                        mv "$FILE" $DEST_DIR
                        cd $DEST_DIR
                        $PROG_EXEC $FILE &
                done
        fi
        sleep $SCAN_TIME
done


master.sh
Примерен код
#!/bin/bash
#
# simple script for controling our watcher
# made for BASH Maistora contest
#
# author: vvitkov
# version: 0.1
# date: 04.09.2007
# contact: http://www.getoto.net/az/
# license: CC NC-BY-SA v3.0

LOCATION="/tmp/bin/"
DAEMON="watcher.sh"
EXEC_PROG="ctorrent"

case "$1" in
        start)
                if [ `pidof $DAEMON` ]; then
                        echo "Already running ... what the hell do you think"
                        exit 1
                fi
                echo "Starting Watcher for new files ..."
                $LOCATION/$DAEMON &
                echo "It's now running in background scanning every 30 secs"
        ;;
        stop)
                echo "Stopping watcher (can take up to 30 secs) ..."
                kill `pidof $DAEMON`
                echo  "Done"
        ;;
        status)
                COUNT=`ps ax | grep $EXEC_PROG | grep -v "grep"`
                echo "You have $COUNT running $EXEC_PROG instances"
                echo "You good boy :)"
        ;;
        kill)
                echo "Stopping Watcher and tasks (you better be sure what you are doing)"
                echo "Stopping watcher (can take up to 30 secs) ..."
                kill `pidof $DAEMON`
                echo "Stopping tasks"
                kill `pidof $EXEC_PROG`
                echo "Done"
        ;;
        *)
                echo "Invalid option"
                echo "Valid: start | stop | status | kill"
        ;;
esac


Малко обяснения по скриптовете. Два файла са със различна задача. watcher.sh върши същинската работа, а master.sh го командва.

Очаква се файловете да нямат интервали в имената си. Това може да бъде избягнато но ... мързела е голямо нещо.
В променливата EXEC_PROG се описва програмата която трябва да се изпълни със всички необходими опции. Опциите могат да бъдат отделени в допълнителна променлива но май няма много смисъл. А и е тривиално за дописване.
Смята се че програмката ни не минава във фонов режим сама за това я слагаме насилствено.

В master.sh EXEC_PROG е само името на програмката ни без опции. Смятам че скриптовете са достатъчно прости за да бъдат разбрани от всеки, но ако има въпроси може да стреляте.

Edit: малко козметика





Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: VladSun в Sep 04, 2007, 15:31
Моето предложение :)
Малко тъпо става обаче, че 90% от кода на различните участници почти винаги ще е един и същ ...

... Писна ми да се опитвам да кача код ... все се реже нещо ...

tdprocess.sh

PS: Не ми се прави санитизация на входните данни :)





Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: gat3way в Sep 04, 2007, 19:18
Същото нещо, само че на С.

usf.c

Предимства:

* няма нужда от 2 отделни скрипта/програми
* "демонизира" се, ужким нямаме проблеми ако му се затвори controlling tty-то (логаутнем се да речем)
* предполагам е бързо
* kill няма да изпотрепе всички ctorrent процеси, само тези дето са извикани от програмата
* Този случай който описах - представете си, че някой е ъплоуднал файл до средата и тая бракма вземе че я премести както е така наполовина - в моя случай няма как да стане, защото проверявам дали някой не го "държи" (това е и недостатък от друга страна)


Недостатъци:

* Написано е набързо, възможни са гранични положения такива, дори секюрити рискове при положение, че някой друг юзър-идиот си поиграе и реши да пише лоши неща в разни файлове, докато това нещо работи

* Отново същият проблем - домързя ме да правя повече проверки, например кво става ако нямаме ctorrent или пък нямаме такива две директории

* Не е portable щото не е казано, че всички машини трябва да имат С компилатор, lsof и awk.

* Като цяло е мърляво написано, ма за толкоз време - това е.


Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: gat3way в Sep 04, 2007, 19:38
Уф, шибана работа, не съм дочел условието и си мислех, че трябва всякакви файлове да се местят, а за торънт файловете специално да се вика ctorrent :)

Ееее, нищо, значи местим файлове всекви :)


Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: the_real_maniac в Sep 04, 2007, 20:17
Хахахах и аз мислех да го пиша на С , обаче се спрях щото и аз щяхд а го напиша на бързо, н о като гледам ти не набързо, ами хх, сори , но честно ми е непрегледно ,аз по навик удрям доста ентъри като пиша код и дори и да има разместваня покрай ентърите успявам да правя разлика къде какво свърша :) ;-)

:) И все пак е хубаво и такива варианти да се видят :-P :)

единственият минус мен , ако ме питаш е , че трябва компилатор и комилиране, докато script-овете на момента едит и щрак :)

:-p :)
Айде , успех на участниците :-D  :p  B)  :)


Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: edmon в Sep 05, 2007, 18:13
за какво пишете нов "демон" като един цял демон вече върви и се казва cron.
от там нататак.
mv
torent {file}.torrent

или не съм рабрал целта?
аа да има старт и стоп. ми кофти ми се вижда задачата като задача.
дайте по издържани задачи. в смисъл да не се откриват недомислици.
или викате за какво да пък да не преоткрием топлата вода!


Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: zeridon в Sep 09, 2007, 15:33
В спора се ражда истината ...

А и като цяло всички май се залепваме към думичката торент. А самото условие е да има възможност да се поразвие и за друг тип файлове операции.

Има го и момента с мойто гардже най-хубаво ма честно харесвам си боклука дет съм драснал :)


Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: Uvigii в Sep 09, 2007, 19:39
Цитат (zeridon @ Сеп. 04 2007,15:12)
Submission :)

следват 2 скрипта и обяснения към тях...

Добави условие за макс. бр. паралелно изпълнявани процеси, преди местенето от срд_дир и стартирането на нов процес. Мисля, че ще е полезно.


Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: BULFON в Sep 10, 2007, 23:21
Здравейте,
днес е 10.09 и имаме победител в конкурса - това е Зеридон.
Решението му е най-близо до началните правила на конкурса.
Понеже се познаваме с другите решили задачата, и искаме да не гледат как Зеридон си пие сам от виното, ги каним на по една, две бири следващата седмица.
Равносметка:
3 решения на задачата. Всяко има трески за дялане, но решава задачата. Първи и най-бърз беше Зеридон. Втори и с доста интересни идеи решение - Владсън. Трети по време беше Гейтуей (надявам се никой да не се засегне за кирилизацията на името му), но пък решението му беше интересно и на C.
Зеридон печели, защото беше първи и даде решение в духа на конкурса. Другите печелят, защото усетиха идеята и участваха.
Тримата победители да се обадят, да си уговорим среща за предаване на наградите.
Наградата за следващата седмица е Linksys WiFi PCI карта. Но задачата все още не е поставена :).


Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: VladSun в Sep 11, 2007, 01:25
Честито на zeridon и на останалите печеливши :) :p

Среща - "Кривото", сряда, 19:30 ;) ?





Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: ognyan в Sep 11, 2007, 13:30
Само да направя едно допълнение към скрипта на zeridon - ако добавиш едно
IFS='
'

в началото би трябвало да нямаш проблеми с интервалите. кратко и лесно е за имплементация





Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: gat3way в Sep 11, 2007, 14:20
Съжалявам, пичове, няма как да се явя :)

В момента съм в Париж, пия някаква зловеща бира (8.4% алкохол!!!;), от прозореца се вижда върха на Айфеловата кула, въобще голям ташак :)  Всъщност, тъпата кула ми е на 10 минути пеша :) Много готино място е Париж, не бях идвал от 9 години, сега пак си ме кефи както преди, много по-готино е от Рим определено :) Вчера ходих до Дефанс и до Пигал, същото си е като преди (на Дефанс само дето са построили 1-2 нови небостъргачи). Най-забавното е че си имам ADSL модем, cisco 575LRE, оставили са му enable парола "cisco", бухахха :) Въобще, от всички почивки тая година, тая в Париж най-много ме радва засега, много се радвам :) А също гледам, че моите машинки вкъщи са онлайн, не е спирал тока, много забавно :)

Имаше май потребители на линукс-бг в Париж, дайте да се видим, бе пичове, тука по цял ден скучая до 18, докато приятелката ми свърши с обученията :(

Май няма да мога да участвам и във вторият кръг :( Кисна на един ноутбук с winxp, немам никви компилатори, мисля след малко да излезна да се разходя, ама е много студено :(

Тука реновират няква спирка на метрото, надуха ми главата...а изпих втора такава бира по никое време и главата ми здраво се завъртя :()

Ама да знаете че като се прибера в София след седмица, ще се присетя за виното :)





Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: BULFON в Sep 11, 2007, 14:44
Тогава задружно ще се съберем следващата седмица. Тъкмо да му е минал махмурлука на Гейтуей. А между другото той може в  ЛС да ми прати контакт някакъв (ICQ/GOOG/mail).


Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: kingfisher в Sep 11, 2007, 15:03
При мен има излизат грешки  и в двата скрипта в с bash-3.0 версия съм.
В watcher.sh излиза:
watcher.sh: line 21: [: !-d: unary operator expected
watcher.sh: line 25: [: !-d: unary operator expected
Повече за проблема : http://www.linuxcommand.org/wss0100.php
При master.sh stop
kill: usage: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec]
Хаиде с kill-a е ясно ама като ще се пие бира поне да е заслужено :)
P.S: Така че за мен на vladsun варианта по ми допада, ако това има някакво значение :)





Титла: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: gat3way в Sep 11, 2007, 15:10
Пратил съм :)

Едит: 3-та такава бира. Мамка му, не е човешко това. А мислих да се разходя малко :( Monoprix са виновни, гадовете шибани! Не ги е срам да си правят магазин точно до хотела!!! И после, тия хора не били алкохолици :( Мче тя загорката и каменицата имат 2 пъти по-малко спирт вътре в сравнение с тия брутализми :(





Титла: Re: Задача 1 - 03.09 - 09.09 - torrent watch
Публикувано от: Acho в Jan 30, 2023, 10:13
Кви са тия спамове по дъртите теми ?