Проблема с bash-скриптом и запуском оного в определенное время.

Discussion in 'PHP' started by Thenno, 8 Aug 2010.

  1. Thenno

    Thenno Member

    Joined:
    3 Jul 2009
    Messages:
    77
    Likes Received:
    21
    Reputations:
    0
    Сейчас, начитавшись айтихепенса, занимаюсь написанием будильника. Скрипт должен запускаться в определенное время посредством "at". Сам скрипт при запуске лично мною работает отлично, но при запуске в определенное время возникло две проблемы:
    1. Не получается запустить из него другой скрипт в параллельном режиме, т.е команду "sh scripts/music.sh &" система игнорирует. Без & все работает замечательно.
    2. Попытка вызвать kdialog из скрипта успехом также не увенчалась. Видел подобную проблему у людей на форумах, но с планировщиком cron, решения не прилагалось.

    Подскажите пожалуйста, это такие фичи системы, или я что-то делаю не так?
     
  2. hkmakes

    hkmakes Member

    Joined:
    3 Jan 2010
    Messages:
    126
    Likes Received:
    11
    Reputations:
    10
    Скрипт в студию

    "Параллельном режиме, т.е команду "sh scripts/music.sh &"
    Сделай &&
     
    #2 hkmakes, 8 Aug 2010
    Last edited: 8 Aug 2010
  3. Thenno

    Thenno Member

    Joined:
    3 Jul 2009
    Messages:
    77
    Likes Received:
    21
    Reputations:
    0
    Да скрипт самый банальный. Убавляет громкость, берет данные двух других скриптов, проговаривает их, запускает скрипт, управляющий плеером а потом не дает этот плеер отключить пока я не проснусь и не вспомню пароль. Собственно, плеер я могу и сам из консоли убивать, но так было бы приятней.

    PHP:
    amixer set PCM 25 -q
    say
    ="\"`sh scripts/time.sh` `sh scripts/weather.sh`\""
    echo "(voice_msu_ru_nsh_clunits) (SayText $say)" festival
    sh scripts
    /music.sh &
    pas="пустострочка"
    while [ $pas != "нет" ]
        do
            
    pas=`kdialog --password "Не спать!"`
        
    done
    killall mplayer
    && не помогло.
     
  4. hkmakes

    hkmakes Member

    Joined:
    3 Jan 2010
    Messages:
    126
    Likes Received:
    11
    Reputations:
    10
    дай скриптик sh scripts/weather.sh интересно

    Я вобще когда вставать лень коннектюсь со смарта через midpssh и килю mpg321 нах )

    Ща поковыряюсь отвечу вот тока kdialog тавить неохота много либ тянуть

    апосле festival че ненадо & !?

    поидее тогда он у тя стопориться после фестиваля
     
    #4 hkmakes, 9 Aug 2010
    Last edited: 9 Aug 2010
  5. drim

    drim Member

    Joined:
    27 Aug 2009
    Messages:
    347
    Likes Received:
    33
    Reputations:
    4
    sh scripts/music.sh
    просто "scripts/music.sh", без "sh"
     
    2 people like this.
  6. Thenno

    Thenno Member

    Joined:
    3 Jul 2009
    Messages:
    77
    Likes Received:
    21
    Reputations:
    0
    Вместо kdialog можно использовать xmessage, результат один.

    А зачем после festival & ? При запуске из консоли вручную все прекрасно работает. Да и не надо мне, чтобы голос вместе с музыкой звучал)

    Скрипт попахивает извращенствами, но работает. Чем хорош яндекс - он сам определяет твое местоположение, не надо каждый раз менять.

    PHP:
    wget -`pwdhttp://m.weather.yandex.ru/ -q
    weather=`cat index.html | egrep -o "<strong>.*,"`
    t=`echo $weather | egrep -o "[0-9]*"`
    z=`echo $weather | egrep -o "[+..-]"`
    nebulosity=`echo $weather | egrep -o "<p>.*</p>" | egrep -o "([а-я],?[[:space:]]?)*"`

    case 
    $t in
        1
    |21|31|41|51)
            
    word="градус";;
        
    2|3|4|22|23|24|32|33|34|42|43|44|52|53|54)
            
    word="градуса";;
        *)
            
    word="градусов";;wget -`pwdhttp://m.weather.yandex.ru/ -q
    weather=`cat index.html | egrep -o "<strong>.*,"`
    t=`echo $weather | egrep -o "[0-9]*"`
    z=`echo $weather | egrep -o "[+..-]"`
    nebulosity=`echo $weather | egrep -o "<p>.*</p>" | egrep -o "([а-я],?[[:space:]]?)*"`

    case 
    $t in
        1
    |21|31|41|51)
            
    word="градус";;
        
    2|3|4|22|23|24|32|33|34|42|43|44|52|53|54)
            
    word="градуса";;
        *)
            
    word="градусов";;
    esac

    if [ "$z"+" ]
        
    then
            t
    ="Температура воздуха плюс $t $word"
        
    else
            
    t="Температура воздуха минус $t $word"
    fi
    echo "$t$nebulosity"
    rm index.html
    esac

    if [ "$z"+" ]
        
    then
            t
    ="Температура воздуха плюс $t $word"
        
    else
            
    t="Температура воздуха минус $t $word"
    fi
    echo "$t$nebulosity"
    rm index.html
    2drim
    Благодарю, одна проблема решена.
     
  7. hkmakes

    hkmakes Member

    Joined:
    3 Jan 2010
    Messages:
    126
    Likes Received:
    11
    Reputations:
    10
    Непонял какя проблема решена и за что спасибо,
    За скрипт благодарю

    Насколько знаком с башем:
    & - исполнение следующий комманды по окончанию данной
    && - параллельное исполнение комманд

    И не пойму при чем тут sh

    #!/bin/bash
    echo "script" | at $1 -это для запуска основного скрипта в виде script 12:10

    незабудь права посиавить

    раз из консоль работает значит заработает
     
    #7 hkmakes, 10 Aug 2010
    Last edited: 10 Aug 2010
  8. Thenno

    Thenno Member

    Joined:
    3 Jul 2009
    Messages:
    77
    Likes Received:
    21
    Reputations:
    0
    Права на исполнение с самого начала повесил) И как запускать через at я знал, спасибо)

    Насчет & и &&
    & - запуск команд в параллельном режиме, а && - запуск следующей команды в случае удачного завершения предыдущей, как то так. Вот тут про это есть http://ods.com.ua/koi/unix/bash-conspect.html

    sh убрал, плеер начал запускаться параллельно, я тогда это имел ввиду.