настройка профилей процессов в ubuntu

настройка профилей процессов в ubuntu

Мне было интересно, возможно ли настроить профили для моего ноутбука с Ubuntu таким образом, чтобы:

  • Отключите apache/mysql/postgresql, если работаете в режиме батареи
  • Если беспроводная связь отключена, отключите все процессы, пытающиеся подключиться к Интернету.

решение1

Я раньше не сталкивался с концепцией такого профиля в Ubuntu, поэтому предполагаю, что сделать это сразу не получится.

Я могу ошибаться, предполагая это, что было бы неплохо. Однако, предполагая, что нет приложения, которое бы это делало, и у меня было сильное желание это настроить, вот сейчас я бы этим занялся.

Я собираюсь написать это, предполагая, что вы используете Gnome, поскольку это среда, которую я знаю лучше всего. Базовый поток процессов должен оставаться действительным, если вы находитесь в какой-то другой среде рабочего стола или консоли.

Gnome позволяет вам настраивать некоторые аспекты поведения системы черезСистема > Настройки > Управление питанием. Это вызываетgnome-power-предпочтения, и это обеспечиваетсяgnome-power-managerПроцесс демона. Из страницы проекта gnome мы знаем, чтоgnome-power-managerHAL определяет, работает ли ноутбук от батареи.

gnome-power-manager

Итак, зажигайgnome-device-managerчтобы увидеть, что знает HAL. Найдите запись длябатарея. Если вы видите только вкладку «Сводка», включитеВид > Свойства устройства. Да, вот два ключа, которые нам нужны:аккумулятор.перезаряжаемый.разряжаетсяиаккумулятор.перезаряжаемый.заряжается

gnome-device-manager

Теперь, когда мы знаем, что нам нужно, нам нужно выяснить, как получить к этому доступ через командную строку. Полезно, что HAL поставляется с командными инструментами для доступа к этой информации. Сначала мы запускаем

hal-устройство | меньше

и ищитеbattery.rechareable.is_dischargeringключ. Сделайте резервную копию, чтобы получить блок, в котором содержится подробная информация о вашей батарее:

56: udi = '/org/freedesktop/Hal/devices/computer_power_supply_battery_BAT0'
  linux.subsystem = 'power_supply'  (string)
  info.capabilities = { 'battery' } (string list)
  info.subsystem = 'power_supply'  (string)
  info.product = 'DELL CC1546'  (string)
  info.udi = '/org/freedesktop/Hal/devices/computer_power_supply_battery_BAT0'  (string)
  battery.type = 'primary'  (string)
  battery.reporting.technology = 'Li-ion'  (string)
  battery.technology = 'lithium-ion'  (string)
  battery.model = 'DELL CC1546'  (string)
  battery.vendor = 'Panasonic'  (string)
  battery.voltage.design = 11100  (0x2b5c)  (int)
  battery.voltage.unit = 'mV'  (string)
  battery.reporting.design = 4700  (0x125c)  (int)
  battery.reporting.unit = 'mAh'  (string)
  battery.serial = '1076'  (string)
  battery.present = true  (bool)
  battery.voltage.current = 12712  (0x31a8)  (int)
  battery.reporting.rate = 2765  (0xacd)  (int)
  battery.is_rechargeable = true  (bool)
  battery.rechargeable.is_charging = true  (bool)
  battery.rechargeable.is_discharging = false  (bool)
  battery.reporting.current = 3407  (0xd4f)  (int)
  battery.reporting.last_full = 3963  (0xf7b)  (int)
  battery.charge_level.current = 37817  (0x93b9)  (int)
  info.parent = '/org/freedesktop/Hal/devices/computer'  (string)
  linux.sysfs_path = '/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0'  (string)
  battery.charge_level.design = 52170  (0xcbca)  (int)
  battery.charge_level.percentage = 85  (0x55)  (int)
  battery.remaining_time = 723  (0x2d3)  (int)
  battery.charge_level.rate = 30691  (0x77e3)  (int)
  battery.charge_level.last_full = 43989  (0xabd5)  (int)
  info.category = 'battery'  (string)
  linux.hotplug_type = 2  (0x2)  (int)

Обратите вниманиеудиустройства. Теперь запросите нужное вам свойство, используяhal-получить-собственностькоманда:

$ hal-get-property --udi /org/freedesktop/Hal/devices/computer_power_supply_battery_BAT0 --key "battery.rechargeable.is_discharging"
true

Теперь мы знаем, как получить доступ к статусу батареи, вставьте это в скрипт, подобный демону. Ниже приведен базовый шаблон, который принимает интервал опроса в качестве первого параметра. Вы можете на досуге доработать его проверкой ошибок и другими приятными конструкциями:

#!/usr/bin/env perl

my ($sleep_duration) = @ARGV;
print "Sleep:$sleep_duration\n";

do{
        my $status = qx(hal-get-property --udi /org/freedesktop/Hal/devices/computer_power_supply_battery_BAT0 --key "battery.rechargeable.is_discharging");
        if ($status =~ /true/)
        {
                print "On battery power\n";
                # shut down apache
                # shut down mysql
                # shut down postgresql

        }
        sleep $sleep_duration;
} while (true);

В скрипте вам следует использовать скрипты запуска для корректного завершения работы MySQL и т. д.

sudo /etc/init.d/mysqld остановить

Как мы можем это улучшить? После того, как вы поработаете с этим некоторое время и устраните все неполадки, сделайте это службой, которая запускается при загрузке. Проверьте этот ответздесьдля получения инструкций по добавлению скрипта для автоматического запуска при загрузке.

Если вы решили этого не делать, проверьте этовопросдля получения инструкций о том, как разрешить этому скрипту выполнять команды, требующие прав root.

Я понимаю, что ответил только на одну часть вашего вопроса, но вы должны быть в состоянии включить раздел беспроводной связи аналогичным образом. Используйте HAL, чтобы понять, когда беспроводная связь отключена.

Я не совсем уверен, как вы проверяете и отключаете все процессы, которые пытаются подключиться к сети, но следующие команды могут помочь вам в этой задаче:

# list all processes using port 80
lsof -i tcp:80

#list programs connected via tcp 
#include -u to include udp connections
sudo netstat -ntp

решение2

laptop-mode-toolsможем сделать то, о чем вы просите.

   /etc/laptop-mode/conf.d/start-stop-programs.conf
       Модуль start-stop-programs позволяет запускать и останавливать программы.
       когда компьютер переключается в другое состояние питания.

       CONTROL_START_STOP
                 Если эта опция включена, инструменты режима ноутбука будут автоматически
                 автоматически запускать и останавливать демоны или другие программы для вас.
                 фактическая конфигурация демонов, которые должны быть
                 остановка/запуск осуществляется путем размещения ссылок на init-файлы демонов
                 скрипты в следующих каталогах:

                    /etc/laptop-mode/batt-start

                    /etc/laptop-mode/batt-stop

                    /etc/laptop-mode/lm-ac-start

                    /etc/laptop-mode/lm-ac-stop

                    /etc/laptop-mode/nolm-ac-start

                    /etc/laptop-mode/nolm-ac-stop
                 Как вы, наверное, догадались, каталоги вида «X-
                 stop-daemons" должен содержать сценарии инициализации демонов, которые вы
                 хотите остановиться в режиме X, в то время как каталоги вида "X-
                 start-daemons" должен содержать сценарии инициализации демонов, которые
                 вы хотите, чтобы он запускался в режиме X. Конечно, можно поставить
                 в вашей собственной обработке режимов: единственное требование
                 в скриптах в каталогах заключается в том, что они обрабатывают
                 Команды «start» и «stop», как это обычно делают сценарии инициализации.

                 Порядок обработки скрипта следующий. Когда
                 режим вводится, действия предыдущего режима отменяются,
                 в обратном порядке. Это означает, что если предыдущий режим имел
                 сделали "daemon1 stop", "daemon2 stop" и "daemon3 start", затем
                 отменяемые действия будут "daemon3 stop", "daemon2 start",
                 "daemon1 start". После этого, стоп-скрипты для нового
                 вызываются mode, а затем вызываются стартовые скрипты.
                 Обратите внимание, что общих черт не обнаружено.
                 между режимами в этой точке, т.е. если режим, в котором вы находитесь,
                 и из режима, который вы собираетесь указать, что демон
                 «X» необходимо остановить, тогда демон будет разблокирован.
                 (то есть запущен) при выходе из предыдущего режима, а затем
                 снова остановился.

       BATT_STOP

       BATT_START

       LM_AC_STOP

       LM_AC_START

       NOLM_AC_STOP

       NOLM_AC_START

                 Эти параметры позволяют останавливать службы (через их инициализацию)
                 скрипты) в определенных состояниях питания. Укажите разделенные пробелом
                 Список названий услуг в этих опциях. Эти услуги
                 запускается/останавливается вместе с файлами из каталогов
                 упомянутое выше.

Его основную функцию (замедление вращения жесткого диска) можно отключить в файле конфигурации, при этом он все равно будет выполнять другие действия.

решение3

Эту команду можно использовать для остановки или запуска служб:

sudo /etc/init.d/'preferred services' stop|start|restart

Связанный контент