LINUX.ORG.RU

Нужен скрипт запускающий программу вместе со скринсейвером

 , , ,


2

1

А также завершающий программу когда скринсейвер деактивируется.

Нашел вот такой скрипт:

#!/bin/bash

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'" | while read line ; do
    if [ x"$(echo "$line" | grep 'boolean true')" != x ] ; then 
sh /home/pl7ofit/script.sh # выполняется во время работы скринсейвера
        echo "ScreenSaver start"
	date
    fi
    if [ x"$(echo "$line" | grep 'boolean false')" != x ] ; then 
kill $(pgrep script.sh) # выполняется после завершения скринсейвера
        echo "ScreenSaver stop"
        date
    fi
    #echo ${line}
done

Он запускает мой скрипт, но не завершает его после пробуждения, гуру-sh скриптов скажите в чем проблема? PS: выполнение застревает на пятой строке и не двигается дальше.

Может ждет завершения работы /home/pl7ofit/script.sh?
Надпись «ScreenSaver start» выводится?

TDrive ★★★★★ ()
Ответ на: комментарий от TDrive

Скорее всего ждет, но эта надпись выводиться если в конец скрипта добавить «|», а как сделать что бы он не ждал завершения?

Pr0f1t ()
Ответ на: комментарий от TDrive

Спасибо, это сработало, сделал вот так:

#!/bin/bash

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'" | while read line ; do
    if [ x"$(echo "$line" | grep 'boolean true')" != x ] ; then 
sh /home/pl7ofit/script.sh & # выполняется во время работы скринсейвера
        echo "ScreenSaver start"
	date
    fi
    if [ x"$(echo "$line" | grep 'boolean false')" != x ] ; then 
kill $(pgrep prog0) 
kill $(pgrep prog1)   # выполняется после завершения скринсейвера
        echo "ScreenSaver stop"
        date
    fi
    #echo ${line}
done

Правда есть небольшая проблема, если слишком быстро пробудить комп, то prog1 не завершается

Pr0f1t ()
Ответ на: комментарий от Pr0f1t

Возможно kill $(pgrep prog1) выполняется до того как успевает запуститься сам prog1.

TDrive ★★★★★ ()

if [ x"$(echo «$line» | grep 'boolean true')" != x ] ; then

Лол, зачем этот начемоданечерезкитай?

echo "$line" | grep -q 'boolean true' && {…}

на пятой строке

sh это точно sh? /home/pl7ofit/script.sh точно не содержит синтаксических ошибок на этот самом sh? Почему скрипт не форкается в бекграунд?

Алсо, твоя эта строчка с dbus-monitor она не заканчивается. Если её вбить в шелл, шелл продолжает висеть. По крайней мере, у меня.

Deleted ()
Ответ на: комментарий от Deleted

Скрипт запускает два майнера BTC, minerd и cudaminer, тут на Lor'e можно заводить темы про bitcoin?

#!/bin/bash
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'" | while read line ; do
    if [ x"$(echo "$line" | grep 'boolean true')" != x ] ; then 
sh /home/pl7ofit/.my-miner/ltc-miner.sh &
        echo "ScreenSaver start"
	date
    fi
    if [ x"$(echo "$line" | grep 'boolean false')" != x ] ; then 
kill $(pgrep minerd) 
kill $(pgrep cudaminer)
        echo "ScreenSaver stop"
        date
    fi
    #echo ${line}
done

Я шарю в sh скриптах чуть менее чем никак. Заменил я две строчки твоим вариантом кода, выхлоп теперь орет что нет такой команды.

Pr0f1t ()
Ответ на: комментарий от Pr0f1t

kill $(pgrep ...) - разные извращения бывают на свете. man pkill

ananas ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.