The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Как в Ubuntu выполнить действие или..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Как в Ubuntu выполнить действие или..."  +/
Сообщение от auto_tips on 10-Июн-11, 10:09 
Иногда следует перед выполнение перехода в спящий или ждущий режим выполнить какие-то действия, например, дождаться завершения какого-то процесса или принудительно завершить его.

Например, в случае использования инструмента резервного копирования backintime при копировании данных по сети может наблюдаться проблема, вызванная тем, что backintime блокирует переход в спящий режим до завершения выполнения операции, но проверка на запуск backintime осуществляется уже после отключения сетевых интерфейсов, т.е. завершить копирование по сети уже невозможно, что приводит к сбою в работе backintime и невозможности перевести систему в спящий режим.


В качестве решения проблемы можно создать простой скрипт, который на начальной стадии перехода в спящий режим дождется завершения выполнения программы. Создаем /etc/pm/sleep.d/01_backintime:


   #!/bin/bash
   # Arve Seljebu, may 2010

   # check if script parameter is hibernate or suspend
   case "${1}" in
     hibernate|suspend)
       # run loop as long as program /usr/bin/backintime is running
       while pgrep -f "/usr/bin/backintime "; do
         sleep 5
       done
     ;;
   esac

   # always exit cleanly
   exit 0


Другой проблемой может стать необходимость отмонтирования вручную подключенных шифрованных или сетевых ФС, например, для отмонтирования encfs-разделов можно использовать скрипт /etc/pm/sleep.d/20_unmount_storage:

   #!/bin/bash
   #
   # Script which unmounts network storage before suspend and  hibernate.
   #
   # Arve Seljebu. May 2011

   PATH=/sbin:/usr/sbin:/bin:/usr/bin

   # Which mountpoints we want to umount
   MOUNTPOINT[0]=/media/storage/encfs
   MOUNTPOINT[1]=/media/storage
   #MOUNTPOINT[2]=/media/storage2
   # User to run from (user who mounted them)
   USER=username

   if [ ! -x /bin/mountpoint ]; then
     echo "Did not find executable /bin/mounpoint"
     exit 0
   fi

   case "${1}" in
     hibernate|suspend)
       for i in "${MOUNTPOINT[@]}"
       do
       # check if the mountpoint is mounted
       echo "Checking if mountpoint $i is mounted..."
       sudo -u $USER mountpoint $i > /dev/null
       if [ "$?" == "0" ]; then
         # try to umount with fusermount, if not succsessful, try    with umount
         echo "Mountpoint $i mounted, umounting..."
         fusermount -u $i
         if [ "$?" != "0" ];
         then umount $i
         fi
       fi
     done
     echo "Done..."
     exit 0
     ;;
     resume|thaw)
     # nothing
     ;;
   esac


По аналогии можно создать скрипты и для обработки других ситуаций.

URL: http://ubuntuforums.org/showthread.php?p=10835088#post10835088
Обсуждается: http://www.opennet.dev/tips/info/2587.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как в Ubuntu выполнить действие или остановить программу пер..."  +/
Сообщение от Анонимус_б6 on 10-Июн-11, 10:09 
где в баш-скриптах хоть что-то убунту специфичное?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Как в Ubuntu выполнить действие или остановить программу пер..."  +/
Сообщение от zomg on 10-Июн-11, 11:45 
Пакеты pm-utils, coreutils и bash отныне работают только в убунту.
s,Ubuntu,GNU/Linux, же!
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Как в Ubuntu выполнить действие или остановить программу пер..."  +/
Сообщение от Вася (??) on 10-Июн-11, 15:03 
pidgin как заофлайнить через dbus?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Как в Ubuntu выполнить действие или остановить программу пер..."  +/
Сообщение от nub0 on 11-Июн-11, 12:48 
purple-remote setstatus?status=offline
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

4. "Как в Ubuntu выполнить действие или остановить программу пер..."  +/
Сообщение от Аноним (??) on 10-Июн-11, 15:16 
Извиняюсь, а апстарт случайно не эмитит никаких эвентов при таких событиях? Он бы чертовски логично смотрелся в данном случае и если такое событие эмитится - все выглядело бы в 5 раз проще.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Как в Ubuntu выполнить действие или остановить программу пер..."  +/
Сообщение от nub0 on 11-Июн-11, 12:46 
Забыли сделать для созданного скрипта sudo chmod +x
Не сработает же!
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "Как в Ubuntu выполнить действие или остановить программу пер..."  +/
Сообщение от Аноним (??) on 16-Июн-11, 00:08 
>       # run loop as long as program /usr/bin/backintime is running
>       while pgrep -f "/usr/bin/backintime "; do
>         sleep 5
>       done

Ужос, так и появляются Шиндошс... Пользователь же сказал - спать! Значит спать. А не бесконечно раз в пять секунд что-то там делать... плохой пример, негодный :(

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру