- Запуск Скрипта, allez, 16:14 , 04-Сен-09 (1)
>bash: /etc/rc.d/init.d/restard: bin/bash^M: плохой итерпретатор: Нет такого файла или каталога > >Но он то там есть))) Во-первых, где "там" указан именно [b]bin/bash[/b]? Что-то я нигде такой строчки не обнаружил... Во-вторых, если он "там" все-таки есть, то не следовало ли указать полный путь: [b][u]_/[/u]bin/bash[/b]? В-третьих, "^M" ненавязчиво намекает на то, что было бы неплохо файлы, отредактированные в Windows, привести в человеческий вид с помощью, например, [b]dos2unix[/b], [b]fromdos[/b] или [b]d2u[b].
- Запуск Скрипта, buboni, 23:08 , 05-Сен-09 (2)
>[оверквотинг удален] >>Но он то там есть))) > >Во-первых, где "там" указан именно [b]bin/bash[/b]? Что-то я нигде такой строчки не >обнаружил... >Во-вторых, если он "там" все-таки есть, то не следовало ли указать полный >путь: [b][u]_/[/u]bin/bash[/b]? >В-третьих, "^M" ненавязчиво намекает на то, что было бы неплохо файлы, отредактированные > >в Windows, привести в человеческий вид с помощью, например, [b]dos2unix[/b], [b]fromdos[/b] или >[b]d2u[b]. bash я поменял не помагло, у меня есть только bash скрипт и мне нужно его запустить как службу) win файлов у меня нет. может у кого пример есть скрипта запуска службы?
- Запуск Скрипта, allez, 17:10 , 06-Сен-09 (3)
>может у кого пример есть скрипта запуска службы? У вас их в /etc/init.d полно.
- Запуск Скрипта, buboni, 18:05 , 06-Сен-09 (4)
>>может у кого пример есть скрипта запуска службы? > >У вас их в /etc/init.d полно. вот наверху пример и вроде все правильно, но не работает.
- Запуск Скрипта, allez, 18:42 , 06-Сен-09 (5)
>вот наверху пример и вроде все правильно, но не работает. В таком случае запустите его руками и [u]процитируйте[/u] сообщения, которые будут выданы на экран. Именно процитируйте (методом "скопировать-вставить"), а не пересказывайте своими словами. Кстати, я, если честно, так толком и не понял, как называется ваша служба: "restart", "restard" или "restartd". :-) P. S. Да, и что из себя представляет /usr/local/sbin/restart? Если обычный скрипт, приведите здесь его.
- Запуск Скрипта, buboni, 20:19 , 06-Сен-09 (6)
>>вот наверху пример и вроде все правильно, но не работает. > >В таком случае запустите его руками и [u]процитируйте[/u] сообщения, которые будут выданы >на экран. >Именно процитируйте (методом "скопировать-вставить"), а не пересказывайте своими словами. Кстати, >я, если честно, так толком и не понял, как называется ваша служба: >"restart", "restard" или "restartd". :-) > >P. S. Да, и что из себя представляет /usr/local/sbin/restart? Если обычный скрипт, >приведите здесь его. и так у меня есть скрипт вот он и имеет название restart #!/bin/bash prov() { /bin/echoscu -aec CONQUESTSRV1 192.168.1.2 5678 -v -to 5 label=$? if [ "$label" = 0 ]; then pin else /bin/mail -s "Centrisity_Archive" buboni2009@yandex.ru < /tex Fi Pin } pin() { ping 192.168.1.2 -c 6 label=$? if [ "$label" = 0 ]; then proverka else /bin/mail -s "Centrisity_Archive" buboni2009@yandex.ru < /tex1 fi proverka } proverka() { /bin/echoscu -aec DCM4CHEE 127.0.0.1 11112 -v label=$? if [ "$label" = 0 ]; then sleep 300 prov else /etc/init.d/capi restart fi sleep 120 /bin/echoscu -aec DCM4CHEE 127.0.0.1 11112 -v label=$? if [ "$label" = 0 ]; then sleep 300 prov else /etc/init.d/capi restart fi sleep 120
/bin/echoscu -aec DCM4CHEE 127.0.0.1 11112 -v label=$? if [ "$label" = 0 ]; then sleep 300 prov else /etc/init.d/capi restart fi sleep 120 /bin/echoscu -aec DCM4CHEE 127.0.0.1 11112 -v label=$? if [ "$label" = 0 ]; then sleep 300 prov else shutdown -r now fi } Prov пусть этот скрипт имеет название restart Теперь мне нужно этот скрипт запускать как службу
вот те сообщения которые появляются если использовать исполняемый скрипт с названием restard (на верху) он мне выдает состояние в списках служб env: /etc/init.d/restartd: No such file directory где restartd имеет название исполнительный скрипт службы а restart мой скрипт restard!!!! )))) Опечатка возможно в этом моя ошибка )))))) если запустить в терминале bash: /etc/rc.d/init.d/restard: bin/bash^M: плохой итерпретатор: Нет такого файла или каталога заранее спасибо
- Запуск Скрипта, allez, 20:33 , 06-Сен-09 (7)
>prov() { > /bin/echoscu -aec CONQUESTSRV1 192.168.1.2 5678 -v -to 5 > label=$? > if [ "$label" = 0 ]; then >pin > else >/bin/mail -s "Centrisity_Archive" buboni2009@yandex.ru < /tex >Fi Для начала: у вас в скрипте написано именно так - "Fi"? Если да, то исправьте на "fi". Это, конечно, вряд ли устранит вашу основную проблему, но ситуацию точно не ухудшит. :-)
- Запуск Скрипта, buboni, 21:49 , 06-Сен-09 (8)
>[оверквотинг удален] >> if [ "$label" = 0 ]; then >>pin >> else >>/bin/mail -s "Centrisity_Archive" buboni2009@yandex.ru < /tex >>Fi > >Для начала: у вас в скрипте написано именно так - "Fi"? Если >да, то исправьте на "fi". >Это, конечно, вряд ли устранит вашу основную проблему, но ситуацию точно не >ухудшит. :-) ХОРОШО ИСПРАВЛЯЮ)))
- Запуск Скрипта, elvenic, 18:56 , 07-Сен-09 (15)
И не только Fi/fi. Если у вас функции называются "prov" и "pin", то и их вызовы должны быть "prov" и "pin", а не "Prov" и "Pin". bash это не Basic или Pascal, тут имеет значение буковки большие или маленькие.
- Запуск Скрипта, buboni, 19:16 , 07-Сен-09 (17)
>И не только Fi/fi. Если у вас функции называются "prov" и "pin", >то и их вызовы должны быть "prov" и "pin", а не >"Prov" и "Pin". bash это не Basic или Pascal, тут имеет >значение буковки большие или маленькие. Да я уже переделываю весь скрипт так использовать функции в моей задаче нереально (( (а сними проще, они похожи на команду go to))) ) половину исправил вот голову ломаю как сделать условие трех раз. если есть пример покажите плиз.
- Запуск Скрипта, Arpo, 09:02 , 07-Сен-09 (9)
>[оверквотинг удален] > echo $"Usage: $0 {start|stop|restart}" > > exit 1 > esac > exit $? > > >Помогите плиз кто чем может хоть ссылкой на какой нить пример погибаю, >заранее спсибо. >Странно у вас написанно !#/bin/sh , а ошибка bin/bash^M:. У меня есть подозрения, хотя не должно такого быть, но может быть /bin/sh это симлинка на /bin/bash, и по каким-то причинам кто-то ее затер, а потом неправильно создал. Думаю чтоб исключиить данную возможность стоит проверить.
# ls -la /bin/sh
- Запуск Скрипта, pavel_simple, 10:07 , 07-Сен-09 (10)
le directory > >если запустить в терминале > >bash: /etc/rc.d/init.d/restard: bin/bash^M: плохой итерпретатор: Нет такого файла или каталога если вы сочиняете ваши скрипты в любимом редакторе в винде - помните нужно делать конвертацию с win2unix - просто потому что есть различая в обозначении перенос на следующую строку.
- Запуск Скрипта, buboni, 16:08 , 07-Сен-09 (11)
>le directory >> >>если запустить в терминале >> >>bash: /etc/rc.d/init.d/restard: bin/bash^M: плохой итерпретатор: Нет такого файла или каталога > >если вы сочиняете ваши скрипты в любимом редакторе в винде - помните >нужно делать конвертацию с win2unix - просто потому что есть различая >в обозначении перенос на следующую строку. нет я делаю в centos
- Запуск Скрипта, buboni, 16:14 , 07-Сен-09 (12)
Народ у меня теперь повис ещё один вопросик при вызове функций prov и proverka из следующей через какое-то время стек будет переполнен, и скрипт подвесит свой экземпляр bash точно, а может, и всю систему ))) можно ли как нибудь еще организовать переходы не используя функции?
- Запуск Скрипта, elvenic, 17:26 , 07-Сен-09 (14)
>Народ у меня теперь повис ещё один вопросик при вызове функций >prov и proverka из следующей через какое-то время стек будет переполнен, >и скрипт подвесит свой экземпляр bash точно, а может, и всю >систему ))) можно ли как нибудь еще организовать переходы не >используя функции? Ха. Посмотрел я еще раз на ваш скрипт повнимательнее - да вы, батенька, круты до неимоверности. Вы программируете в чистом функциональном стиле, который доступен только гуру Хаскеля, Лиспа и Схемы высшей ступени посвящения :) К сожалению, интерпретатор bash не реализует "оптимизацию хвостовой рекурсии" (tail recursion optimization). В этих условиях вам, пожалуй, прийдется спуститься с вершин функционального стиля и снизойти до использования простых циклов: while [ condition ] ; do command done
- Запуск Скрипта, buboni, 19:03 , 07-Сен-09 (16)
>[оверквотинг удален] > >К сожалению, интерпретатор bash не реализует "оптимизацию хвостовой рекурсии" (tail recursion optimization). > > >В этих условиях вам, пожалуй, прийдется спуститься с вершин функционального стиля и >снизойти до использования простых циклов: > > while [ condition ] ; do > command > done )))))я уже понял и переписываю скрипт. вот только застрял на вопросе как реализавать условие: если после 3 раз не получается, выполнить то то если сможешь намекни)) заранее спасибо
- Запуск Скрипта, elvenic, 19:29 , 07-Сен-09 (18)
>[оверквотинг удален] >> >> while [ condition ] ; do >> command >> done > >)))))я уже понял и переписываю скрипт. >вот только застрял на вопросе как реализавать условие: >если после 3 раз не получается, выполнить то то > >если сможешь намекни)) заранее спасибо Например: COUNTER=0 SUCCESS="false" while [ $COUNTER -lt 4 -a $SUCCESS = "false" ]; do if [ $COUNTER -ge 3 ]; then kill the programmer else let the programmer live for a while and do smething useful calculate success condition if [ success condition ]; then SUCCESS="true" fi fi let COUNTER=COUNTER+1 done Подробнисти смотри здесь: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html а также 'man test'
- Запуск Скрипта, buboni, 21:13 , 07-Сен-09 (19)
>[оверквотинг удален] > >SUCCESS="true" > fi > fi > let COUNTER=COUNTER+1 >done > >Подробнисти смотри здесь: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html > >а также 'man test' блин постояно крутит цикл даже если условие выхода верно мррр а есть какие нибудь еще примеры
- Запуск Скрипта, elvenic, 22:12 , 07-Сен-09 (20)
>[оверквотинг удален] >> fi >> let COUNTER=COUNTER+1 >>done >> >>Подробнисти смотри здесь: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html >> >>а также 'man test' > >блин постояно крутит цикл даже если условие выхода верно >мррр а есть какие нибудь еще примеры Нет, если SUCCESS становится "true", условие цикла становится false и скрипт выходит из цикла. Но можно, к примеру, переписать это так: COUNTER=0 while [ $COUNTER -lt 3 ]; do let the programmer do something useful calculate success condition if [ success condition ]; then break fi let COUNTER=COUNTER+1 done if [ $COUNTER -eq 3 ]; then kill the programmer fi
- Запуск Скрипта, buboni, 09:08 , 08-Сен-09 (21)
>[оверквотинг удален] > let the programmer do something useful > calculate success condition > if [ success condition ]; then > break > fi > let COUNTER=COUNTER+1 >done >if [ $COUNTER -eq 3 ]; then > kill the programmer >fi Ой сори я разобрался ))) огромное спасибо тебе друг Ну вот беда откуда не ждал допустим я хочу организовать 2 цикла (цикл в цикле) 1.цикд while [условие]; do команды 2.цикл until [условие]; do команды done done И вот как только он выходит из второго перед ним done от первого, а он зараза думает что от второго и второй цикл начинается заново а мне нужно чтоб начинался с первого ((( как тут быть?
- Запуск Скрипта, allez, 11:25 , 08-Сен-09 (22)
>[оверквотинг удален] > until [условие]; do >команды >done >done > >И вот как только он выходит из второго перед ним done >от первого, а он зараза думает что от второго и второй >цикл начинается заново а мне нужно чтоб начинался с первого ((( > >как тут быть? Искать, где вы совершили очередную ошибку. :-) Для иллюстрации - вот код:
let i=0 while [ $i -lt 3 ] do let j=0 ((i++)) echo "While loop $i" until [ $j -eq 3 ] do ((j++)) echo " Until loop $j" done done А это - результат его работы:
While loop 1 Until loop 1 Until loop 2 Until loop 3 While loop 2 Until loop 1 Until loop 2 Until loop 3 While loop 3 Until loop 1 Until loop 2 Until loop 3 Как видите, операторы циклов не путают свой "done" с чужим. ;-)
- Запуск Скрипта, elvenic, 17:10 , 07-Сен-09 (13)
>[оверквотинг удален] >>> >>>если запустить в терминале >>> >>>bash: /etc/rc.d/init.d/restard: bin/bash^M: плохой итерпретатор: Нет такого файла или каталога >> >>если вы сочиняете ваши скрипты в любимом редакторе в винде - помните >>нужно делать конвертацию с win2unix - просто потому что есть различая >>в обозначении перенос на следующую строку. > >нет я делаю в centos Может вы изначально создали текст скрипта в Windows. Или может у вашего редактора включена опция "Сохранять файл в Windows/DOS формате" или "Авто-определение конца строк" или что-то похожее. Сейчас это не важно - система жалуется что она не может найти файл "bin/bash^M", именно так, с символом "^M" в конце имени. Попробуйте посмотреть файл скрипта в любом hex-editor, если в конце первой строки стоит "0D 0A" (т.е пара ASCII-символов CR-LF (Carriage Return - Line Feed)), надо "0D" убрать - "0D" это тот самый "^M" (Carriage Return). А вот "0A" - это Line Feed, который в Linux (Unix) и означает конец строки. Все что находится до Line Feed, система воспринимает как имя файла. А файла "bin/bash^M" нету.
|