Автор Тема: bash script GET http://site.com  (Прочетена 2766 пъти)

mrowcp

  • Напреднали
  • *****
  • Публикации: 450
    • Профил
bash script GET http://site.com
« -: Sep 29, 2011, 16:44 »
Направих един баш скрипт, който да следи, когато на http://site.com/up.txt се появи такъв файл ( up.txt ) да записва в /var/log/messages някакво съобщение.
Проблема е, че когато го сложа да се изпълнява в crontab-а, скрипт не сработва ( предполагам заради GET http://site.com/up.txt ), а при ръчно изпълнение всичко е ОК.
Ето скрипта:
Код
GeSHi (Bash):
  1. #!/bin/bash
  2. date=`date +"%d-%m-%Y"`
  3. GET http://site.com/up.txt > /root/scripts/webcheck.txt
  4. status=`grep $date /root/scripts/webcheck.txt | awk '{print $1}'`
  5.  
  6. if [ $date = $status ];then
  7. echo "Today $date file exist" >> /var/log/messages
  8. else
  9. echo "file missing"
  10. fi
  11.  

В лога на кронтаб-а всичко е ОК:

Код:
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'
« Последна редакция: Sep 29, 2011, 16:53 от mrowcp »
Активен

Some Things Just Are The Way They Are

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: bash script GET http://site.com
« Отговор #1 -: Sep 29, 2011, 16:52 »
Защо не смениш GET http://site.com/up.text с curl?
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

borovaka

  • Напреднали
  • *****
  • Публикации: 1331
  • Distribution: Каквото дойде
  • Window Manager: Gnome / KDE
    • Профил
Re: bash script GET http://site.com
« Отговор #2 -: Sep 29, 2011, 16:54 »
//offtopic
@b2l Какво е това съкращение на ника? :)
Активен

Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: bash script GET http://site.com
« Отговор #3 -: Sep 29, 2011, 16:57 »
//offtopic
@b2l Какво е това съкращение на ника? :)

backtolife
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: bash script GET http://site.com
« Отговор #4 -: Sep 29, 2011, 16:58 »
//another offtopic
След като bash-а ти е /usr/local/bin/bash, защо #!/bin/bash? :)


//offtopic
@b2l Какво е това съкращение на ника? :)
Писна му от backtofile :D
Активен

mrowcp

  • Напреднали
  • *****
  • Публикации: 450
    • Профил
Re: bash script GET http://site.com
« Отговор #5 -: Sep 29, 2011, 17:01 »
Защо не смениш GET http://site.com/up.text с curl?

Хъм, как не се бях сетил... Стана, мерси ;)
Активен

Some Things Just Are The Way They Are

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: bash script GET http://site.com
« Отговор #6 -: 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, понякога пак може да ти спести главоболия. Въпрос на навик е ;)
« Последна редакция: Sep 30, 2011, 16:53 от neter »
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

mrowcp

  • Напреднали
  • *****
  • Публикации: 450
    • Профил
Re: bash script GET http://site.com
« Отговор #7 -: 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, поради което не го намира.
За да избегнеш такива недоразумения в бъдеще, си изгради навика да вписваш пълни пътища към всичко (било инструменти, програми или други файлове) в скриптовете си (освен към инструментите в /bin и /sbin), когато пишеш скриптове за crontab. А и дори да не е за crontab, понякога пак може да ти спести главоболия. Въпрос на навик е ;)

Мерси за съветите :) По принцип винаги описвам всяка команда с пълния път, защото и друг път съм го имал този проблем, но в случая... прибързано явно постнах проблема, а трябваше да огледам още малко.
Другото което се сещам, мисля че можеше в самия скрипт с env= да се опишат пътищата или се бъркам?
Активен

Some Things Just Are The Way They Are

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: bash script GET http://site.com
« Отговор #8 -: Oct 01, 2011, 06:59 »
могат да се опишат по същия начин по който се присвояват променливи в скрипта
Код:
PATH=/usr/bin:/bin:/usr/local/bin
но може и много елегантно да си вземеш средата на шела
Код:
. /path/to/home/dir/.bashrc
Активен

0x2B|~0x2B

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: bash script GET http://site.com
« Отговор #9 -: Oct 01, 2011, 20:33 »
Другото което се сещам, мисля че можеше в самия скрипт с env= да се опишат пътищата или се бъркам?
В sh/ksh/bash става с
Код:
export ПРОМЕНЛИВА=СТОЙНОСТ

а в csh/tcsh
Код:
setenv ПРОМЕНЛИВА СТОЙНОСТ

Но не е добра практика да задаваш променливи на средата, когато целта не е именно работа с тези променливи - ако можеш да минеш и без тях, излишно пълниш средата, а може да се окаже и, че някой друг скрипт или приложение се чупи при новите стойности на променливите.
Основната идея на пълните пътища е да се освободиш от зависимостта други части на системата да ти определят основата на релативността, освен ако целта не е точно такава. В случая целта не е такава, и оставянето системата (в това число и други приложения) да ти определя основата или да изнасяш основата извън твоя скрипт може да доведе до главоболия. Целта е да намалим дупките, откъдето може да изскочат неочаквани проблемни зайци.
Дали ще опишеш пълните пътища с временно презаписване на променлива на системата (важащо само за скрипта) в стила на PATH, който ти е предложил romeo_ninov, или ще ги зададеш в отделни твои променливи, е въпрос на вкус - важното е да е направено. В кратки скриптове като твоя можеш да вписваш пълните пътища и директно там, където се ползват (без променливи), но за прегледността, а и винаги съществува вероятност скриптът да нарасне в даден момент, е хубаво да го избягваш - пак е въпрос на навик.
В този ред на мисли не съм съгласен с ползването на .bashrc, тъй като той също е външен за скрипта, и докато е много елегантно решение в комплексни ситуации, то за капсуловани скриптове като този пак може да доведе до проблеми. Но кой както се усеща сигурен.
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

edmon

  • Гост
Re: bash script GET http://site.com
« Отговор #10 -: Oct 01, 2011, 22:58 »
мм извинявай , така проверяваш дали ти работи УЕб сървъра ли?
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: bash script GET http://site.com
« Отговор #11 -: Oct 02, 2011, 21:49 »
В sh/ksh/bash става с
Код:
export ПРОМЕНЛИВА=СТОЙНОСТ

...
Две корекции:
1, експорт на променливите се прави само ако искаме те да се предават на подщел,който ще стартираме от този
2. при sh не можее дновременно да се присвоистойност и променливата да се експортне.Прави се така:
Код:
VAR=value;export VAR
Активен

0x2B|~0x2B

mrowcp

  • Напреднали
  • *****
  • Публикации: 450
    • Профил
Re: bash script GET http://site.com
« Отговор #12 -: Oct 20, 2011, 05:23 »
мм извинявай , така проверяваш дали ти работи УЕб сървъра ли?

Ами... малко лемарско може да изглежда, но не се сетих за по... елегантен начин за следното:

Този скрипт се изпълнява през 2мин. на машина от локалната мрежа.Тази машина заедно с още една са закачени за един UPS.На 1вата машина при спиране на тока се генерира файл с някакъв текст и се копира някъде в www
Та този скрипт следи дали файла се е генерирал и ако да спира машината ( за да не се хабят батерии :) ).
Активен

Some Things Just Are The Way They Are

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
bash script за праверяване на процес
Общ форум
sys7em 8 4061 Последна публикация Aug 09, 2005, 15:39
от
Bash script и извеждането му
Web development
martien 3 3281 Последна публикация Nov 02, 2006, 11:55
от morbid_viper
Bash script за следене съдържанието на директория
Общ форум
mishot 9 4277 Последна публикация Mar 05, 2008, 00:38
от maniac
Bash script
Общ форум
vikktor 14 5324 Последна публикация Mar 04, 2009, 23:38
от CappY
Помощ за bash script
Общ форум
LinuxFanUNIX 4 2840 Последна публикация May 15, 2009, 23:05
от LinuxFanUNIX