Титла: bash script GET http://site.com Публикувано от: mrowcp в Sep 29, 2011, 16:44 Направих един баш скрипт, който да следи, когато на http://site.com/up.txt се появи такъв файл ( up.txt ) да записва в /var/log/messages някакво съобщение.
Проблема е, че когато го сложа да се изпълнява в crontab-а, скрипт не сработва ( предполагам заради GET http://site.com/up.txt ), а при ръчно изпълнение всичко е ОК. Ето скрипта: Код
В лога на кронтаб-а всичко е ОК: Код: Sep 29 16:44:00 caph /usr/sbin/cron[82817]: (root) CMD ('/usr/local/bin/bash /root/scripts/upscheck.sh') Ето и кронтаб-а: Код: */2 * * * * '/usr/local/bin/bash /root/scripts/upscheck.sh' Титла: Re: bash script GET http://site.com Публикувано от: b2l в Sep 29, 2011, 16:52 Защо не смениш GET http://site.com/up.text с curl?
Титла: Re: bash script GET http://site.com Публикувано от: borovaka в Sep 29, 2011, 16:54 //offtopic
@b2l Какво е това съкращение на ника? :) Титла: Re: bash script GET http://site.com Публикувано от: b2l в Sep 29, 2011, 16:57 //offtopic backtolife Титла: Re: bash script GET http://site.com Публикувано от: bop_bop_mara в Sep 29, 2011, 16:58 //another offtopic
След като bash-а ти е /usr/local/bin/bash, защо #!/bin/bash? :) //offtopicПисна му от backtofile :D Титла: Re: bash script GET http://site.com Публикувано от: mrowcp в Sep 29, 2011, 17:01 Защо не смениш GET http://site.com/up.text с curl? Хъм, как не се бях сетил... Стана, мерси ;) Титла: Re: bash script GET http://site.com Публикувано от: neter в Sep 30, 2011, 16:49 Проблема е, че когато го сложа да се изпълнява в crontab-а, скрипт не сработва ( предполагам заради GET http://site.com/up.txt ), а при ръчно изпълнение всичко е ОК.Много лесно си се отказал от идеята си :) Може би единственото, което е трябвало да направиш за GET, е било да го впишеш с пълен път (най-вероятно /usr/bin/GET). Причината скриптът да се изпълнява ръчно, но не и в crontab е, че crontab не знае за променливите на средата (environment variables, виждат се с команда env) на твоя потребител, и докато в твоята променлива на средата PATH има зададен /usr/bin, то твоят crontab не знае за този път, където да търси GET, поради което не го намира. За да избегнеш такива недоразумения в бъдеще, си изгради навика да вписваш пълни пътища към всичко (било инструменти, програми или други файлове) в скриптовете си (освен към инструментите в /bin и /sbin), когато пишеш скриптове за crontab. А и дори да не е за crontab, понякога пак може да ти спести главоболия. Въпрос на навик е ;) Титла: Re: bash script GET http://site.com Публикувано от: mrowcp в Oct 01, 2011, 02:45 Проблема е, че когато го сложа да се изпълнява в crontab-а, скрипт не сработва ( предполагам заради GET http://site.com/up.txt ), а при ръчно изпълнение всичко е ОК.Много лесно си се отказал от идеята си :) Може би единственото, което е трябвало да направиш за GET, е било да го впишеш с пълен път (най-вероятно /usr/bin/GET). Причината скриптът да се изпълнява ръчно, но не и в crontab е, че crontab не знае за променливите на средата (environment variables, виждат се с команда env) на твоя потребител, и докато в твоята променлива на средата PATH има зададен /usr/bin, то твоят crontab не знае за този път, където да търси GET, поради което не го намира. Мерси за съветите :) По принцип винаги описвам всяка команда с пълния път, защото и друг път съм го имал този проблем, но в случая... прибързано явно постнах проблема, а трябваше да огледам още малко. Другото което се сещам, мисля че можеше в самия скрипт с env= да се опишат пътищата или се бъркам? Титла: Re: bash script GET http://site.com Публикувано от: romeo_ninov в Oct 01, 2011, 06:59 могат да се опишат по същия начин по който се присвояват променливи в скрипта
Код: PATH=/usr/bin:/bin:/usr/local/bin Код: . /path/to/home/dir/.bashrc Титла: Re: bash script GET http://site.com Публикувано от: neter в Oct 01, 2011, 20:33 Другото което се сещам, мисля че можеше в самия скрипт с env= да се опишат пътищата или се бъркам?В sh/ksh/bash става с Код: export ПРОМЕНЛИВА=СТОЙНОСТ а в csh/tcsh Код: setenv ПРОМЕНЛИВА СТОЙНОСТ Но не е добра практика да задаваш променливи на средата, когато целта не е именно работа с тези променливи - ако можеш да минеш и без тях, излишно пълниш средата, а може да се окаже и, че някой друг скрипт или приложение се чупи при новите стойности на променливите. Основната идея на пълните пътища е да се освободиш от зависимостта други части на системата да ти определят основата на релативността, освен ако целта не е точно такава. В случая целта не е такава, и оставянето системата (в това число и други приложения) да ти определя основата или да изнасяш основата извън твоя скрипт може да доведе до главоболия. Целта е да намалим дупките, откъдето може да изскочат неочаквани проблемни зайци. Дали ще опишеш пълните пътища с временно презаписване на променлива на системата (важащо само за скрипта) в стила на PATH, който ти е предложил romeo_ninov, или ще ги зададеш в отделни твои променливи, е въпрос на вкус - важното е да е направено. В кратки скриптове като твоя можеш да вписваш пълните пътища и директно там, където се ползват (без променливи), но за прегледността, а и винаги съществува вероятност скриптът да нарасне в даден момент, е хубаво да го избягваш - пак е въпрос на навик. В този ред на мисли не съм съгласен с ползването на .bashrc, тъй като той също е външен за скрипта, и докато е много елегантно решение в комплексни ситуации, то за капсуловани скриптове като този пак може да доведе до проблеми. Но кой както се усеща сигурен. Титла: Re: bash script GET http://site.com Публикувано от: edmon в Oct 01, 2011, 22:58 мм извинявай , така проверяваш дали ти работи УЕб сървъра ли?
Титла: Re: bash script GET http://site.com Публикувано от: romeo_ninov в Oct 02, 2011, 21:49 В sh/ksh/bash става сДве корекции: 1, експорт на променливите се прави само ако искаме те да се предават на подщел,който ще стартираме от този 2. при sh не можее дновременно да се присвоистойност и променливата да се експортне.Прави се така: Код: VAR=value;export VAR Титла: Re: bash script GET http://site.com Публикувано от: mrowcp в Oct 20, 2011, 05:23 мм извинявай , така проверяваш дали ти работи УЕб сървъра ли? Ами... малко лемарско може да изглежда, но не се сетих за по... елегантен начин за следното: Този скрипт се изпълнява през 2мин. на машина от локалната мрежа.Тази машина заедно с още една са закачени за един UPS.На 1вата машина при спиране на тока се генерира файл с някакъв текст и се копира някъде в www Та този скрипт следи дали файла се е генерирал и ако да спира машината ( за да не се хабят батерии :) ). |