Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: скрипт при закрытие программы автоматическое открытие другой программы  (Прочитано 5693 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн brenti

  • Автор темы
  • Активист
  • *
  • Сообщений: 485
    • Просмотр профиля
Есть сбоящее приложение статус принтера, в автозапуске стоит к основной команде параметр "-е" который позволяет запускаться приложению в фоне,  когда приходит время работы приложения (нажимая в появившемся окне - продолжить печать) - программа закрывается совсем, а если запустить приложение через ярлык где команда запуска без всяких параметров "-е" то никаких сбоев не случается при её использовании. Долго думал как решить эту проблему, пришла идея с костылем скриптом - в котором было бы указано, если закроется этот процесс, то запускается другая команда на выполнение программы. Если кто-то шарит, подскажите как написать подобный скрипт?

Пользователь решил продолжить мысль 11 Мая 2013, 14:04:04:
#!/bin/bash
exec /usr/bin/captstatusui -P LBP2900 -e &
while true
do
    if [ "`pidof /usr/bin/captstatusui`" ]
    then
        sleep 0
    else
        /usr/bin/captstatusui -P LBP2900
    fi
done
  :)
« Последнее редактирование: 11 Мая 2013, 14:48:19 от brenti »

Оффлайн coden

  • Участник
  • *
  • Сообщений: 133
  • Ubuntu 13.04 x64
    • Просмотр профиля
Есть сбоящее приложение статус принтера, в автозапуске стоит к основной команде параметр "-е" который позволяет запускаться приложению в фоне,  когда приходит время работы приложения (нажимая в появившемся окне - продолжить печать) - программа закрывается совсем, а если запустить приложение через ярлык где команда запуска без всяких параметров "-е" то никаких сбоев не случается при её использовании. Долго думал как решить эту проблему, пришла идея с костылем скриптом - в котором было бы указано, если закроется этот процесс, то запускается другая команда на выполнение программы. Если кто-то шарит, подскажите как написать подобный скрипт?
можно попробовать такой скрипт (работу скрипта не проверял)
#!/bin/bash

while true
do
captstatusui -P LBP2900 -e &
wait
[ $? -eq 0 ] && break
done

добавить его в автозапуск вместо captstatusui -P LBP2900 -e
правильнее и оптимальнее будет написать программу на C

какая у вас версия и архитектура убунты?
какую версию драйвера ставили?
« Последнее редактирование: 13 Мая 2013, 09:51:19 от coden »

Оффлайн brenti

  • Автор темы
  • Активист
  • *
  • Сообщений: 485
    • Просмотр профиля
какая у вас версия и архитектура убунты?
какую версию драйвера ставили?
Ubuntu 10.04 i386 версия драйвера последняя на сайте канона скаченная, правда в последней версии корявый файл captstatusui - при запуске в терминале команды "captstatusui -P LBP2900" вылетает куча ошибок и не запустившись закрывается к чёрту. Поэтому я вытащил бинарный файл "captstatusui" из прошлой версии драйвера и заменил его /usr/bin/captstatusui в этой версии он хотя бы запускается и правильно работает если запускать по команде captstatusui -P LBP2900, а если captstatusui -P LBP2900 -e то при нажатии на возобновить печать или отменить возникает аварийное завершение. Мой скрипт вполне работает как я хотел, при запуске системы в фоновом режиме запускается captstatusui -P LBP2900 -e, когда возникает момент действия программы появляется окошко статуса - жму на "resume" (продолжить) прога аварийно закрывается и скрипт автоматически запускает команду captstatusui -P LBP2900 в которой глюков с этим нет, жму на "resume" - далее на кнопку "Hide status monitor" после чего прога скрывается и при следующем появлении работает исправно, пока не завершишь сеанс.

Пользователь решил продолжить мысль 13 Мая 2013, 13:45:47:
можно попробовать такой скрипт (работу скрипта не проверял)

[ $? -eq 0 ] && break


А, что собственно делает эта команда?

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
По идее, должно хватить этого:
Код: (bash) [Выделить]
while : ; do captstatusui -P LBP2900 -e ; done

Оффлайн brenti

  • Автор темы
  • Активист
  • *
  • Сообщений: 485
    • Просмотр профиля
По идее, должно хватить этого:
Код: (bash) [Выделить]
while : ; do captstatusui -P LBP2900 -e ; done
если даже повторно запустить команду captstatusui -P LBP2900 -e то всё равно возникает аварийное завершение проги, ваш скрипт делает то, что я подумал?!

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Без разницы, при каких условиях дохнет прога.
Он просто будет запускать её заново, как только она упадёт.
И без холостых циклов.

Оффлайн brenti

  • Автор темы
  • Активист
  • *
  • Сообщений: 485
    • Просмотр профиля
Без разницы, при каких условиях дохнет прога.
Он просто будет запускать её заново, как только она упадёт.
И без холостых циклов.
ну так если заново запускать прогу командой captstatusui -P LBP2900 -e она будет постоянно дохнуть .

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
ну так если заново запускать прогу командой captstatusui -P LBP2900 -e она будет постоянно дохнуть .
Дохнет только в том случае, если уже работает второй экземпляр программы, или я неправильно понял описание ситуации из хэдпоста?

Оффлайн brenti

  • Автор темы
  • Активист
  • *
  • Сообщений: 485
    • Просмотр профиля
Дохнет только в том случае, если уже работает второй экземпляр программы, или я неправильно понял описание ситуации из хэдпоста?
Вы не правильно поняли. Команду captstatusui -P LBP2900 -e я использую при автозапуске, чтобы статус монитора запускался в фоне параметр "-е" обеспечивает это, но когда приходит время продолжить печать и вылетает окошко статуса нажимая на кнопку - продолжить - програ закрывается - не выполнив свои обязательства, и чтобы всё таки продолжить печать нужно запускать статус принтера по команде captstatusui -P LBP2900 в таком виде ошибок не возникает. Если бы как-то можно было добавить команду "captstatusui -P LBP2900" в автозапуск так, чтобы она запускалась в фоне, то я бы это давно сделал, а так приходится использовать скрипт который запускает прогу фоне и когда та падает, то автоматически запускается другая команда где статус работает без ошибок.

Пользователь решил продолжить мысль 13 Мая 2013, 14:46:40:
Короче говоря работает прога нормально тогда, когда запускается без параметра "-е" . Можно было конечно убрать из автозапуска все эти статусы принтера и вручную через ярлык каждый раз запускать программу, когда это собственно необходимо. Но, если к примеру за моим компом окажется другой человек, то он не дошарит, что, чтобы возобновить печать нужно открывать какую-то ещё программу.
« Последнее редактирование: 13 Мая 2013, 14:46:40 от brenti »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Надеюсь, что теперь понял правильно:
Код: (bash) [Выделить]
PRN_STAT="/usr/bin/captstatusui -P LBP2900"
$PRN_STAT -e ; while : ; do $PRN_STAT ; done

Оффлайн brenti

  • Автор темы
  • Активист
  • *
  • Сообщений: 485
    • Просмотр профиля
Надеюсь, что теперь понял правильно:
Код: (bash) [Выделить]
PRN_STAT="/usr/bin/captstatusui -P LBP2900"
$PRN_STAT -e ; while : ; do $PRN_STAT ; done
Да это то, что нужно!  Работает :)

Оффлайн coden

  • Участник
  • *
  • Сообщений: 133
  • Ubuntu 13.04 x64
    • Просмотр профиля
Надеюсь, что теперь понял правильно:
Код: (bash) [Выделить]
PRN_STAT="/usr/bin/captstatusui -P LBP2900"
$PRN_STAT -e ; while : ; do $PRN_STAT ; done
Да это то, что нужно!  Работает :)
если у тебя captstatusui -P LBP2900  работает без ошибок тогда:
PRN_STAT="/usr/bin/captstatusui -P LBP2900"
$PRN_STAT -e
$PRN_STAT & exit
« Последнее редактирование: 14 Мая 2013, 00:15:55 от coden »

Оффлайн brenti

  • Автор темы
  • Активист
  • *
  • Сообщений: 485
    • Просмотр профиля
$PRN_STAT & exit
Я правильно понимаю, что эта строчка означает если запускается команда captstatusui -P LBP2900 то скрипт закрывается - выгружается из памяти?

Оффлайн coden

  • Участник
  • *
  • Сообщений: 133
  • Ubuntu 13.04 x64
    • Просмотр профиля
$PRN_STAT & exit
Я правильно понимаю, что эта строчка означает если запускается команда captstatusui -P LBP2900 то скрипт закрывается - выгружается из памяти?
скрипт завершает работу (команда exit) не зависимо от того запустится captstatusui или нет.

 

Страница сгенерирована за 0.067 секунд. Запросов: 25.