configurando perfis de processos no Ubuntu

2

Eu queria saber se é possível configurar perfis para o meu laptop ubuntu de forma que:

  • Desative o apache / mysql / postgresql se estiver executando em batterymode
  • Desative todos os processos que tentam se conectar à Internet, se a conexão sem fio estiver desativada.
por dassouki 28.08.2009 / 18:28

3 respostas

4

Eu não encontrei o conceito de tal perfil no Ubuntu antes, então estou supondo que você não pode fazer isso logo de cara.

Eu posso estar errado em assumir isso, o que seria legal. No entanto, supondo que não há um aplicativo para fazer isso, e eu tinha um strong desejo de configurar isso, aqui está agora eu vou fazer isso.

Eu vou escrever isso com a suposição de que você está executando o Gnome, já que esse é o ambiente que eu conheço melhor. O fluxo de processo subjacente ainda deve ser válido se você estiver em algum outro ambiente de desktop ou console.

O Gnome permite configurar alguns aspectos do comportamento do sistema por meio do Sistema > Preferências > Gerenciamento de energia . Isso chama o gnome-power-preferences , e é reforçado pelo processo daemon gnome-power-manager . Na página do projeto gnome, sabemos que o gnome-power-manager depende do HAL para saber se o laptop está funcionando com bateria.

Então,abraognome-device-managerparaveroqueoHALsabe.Encontreaentradaparabateria.Sevocêvirapenasumaguiaderesumo,ativeoVisualizar>Propriedadesdodispositivo.Sim,existemasduaschavesqueprecisamos:battery.rechargeable.is_dischargingebattery.rechargeable.is_charging

Agora sabemos o que precisamos, temos que descobrir como acessar isso através da linha de comando. Com ajuda, o HAL vem com ferramentas de linha de comando para acessar essas informações. Nós primeiro corremos

hal-device | less

e pesquise a tecla battery.rechareable.is_discharging . Faça backup para ver o bloco que detalha as informações da sua bateria:

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)

Observe o udi do dispositivo. Agora, consulte a propriedade desejada usando o comando hal-get-property :

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

Agora sabemos como acessar o status da bateria, colocar isso em um script semelhante ao daemon. Abaixo está um modelo básico que leva o intervalo de pesquisa como o primeiro parâmetro. Você pode imaginar a verificação de erros e outras construções agradáveis no lazer:

#!/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);

Dentro do script, você deve usar os scripts de inicialização para limpar o mysql etc

sudo /etc/init.d/mysqld stop

Como podemos melhorar isso? Depois de ter executado isso por um tempo e resolvido todas as torções, faça deste um serviço que inicia na inicialização. Verifique esta resposta aqui para obter instruções sobre como adicionar um script para iniciar automaticamente na inicialização.

Se você decidir não fazer isso, verifique esta pergunta para instruções sobre como permitir que este script execute comandos que exijam permissões de root.

Sei que respondi apenas uma parte da sua pergunta, mas você deve conseguir incorporar a seção sem fio de maneira semelhante. Use HAL para entender quando a conexão sem fio está desativada.

Não sei exatamente como você verifica e desativa todos os processos que tentam se conectar à rede, mas os seguintes comandos podem ajudá-lo com essa tarefa:

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

#list programs connected via tcp 
#include -u to include udp connections
sudo netstat -ntp
    
por 28.08.2009 / 20:58
1

laptop-mode-tools pode fazer o que você está pedindo.

   /etc/laptop-mode/conf.d/start-stop-programs.conf
       The  start-stop-programs  module  allows  you to start or stop programs
       when the computer switches to a different power state.

       CONTROL_START_STOP
                 If this option is enabled, laptop mode tools  will  automati‐
                 cally  start  and stop daemons or other programs for you. The
                 actual   configuration   of   which   daemons   are   to   be
                 stopped/started is done by placing links to the daemons’ init
                 scripts in the following directories:

                    /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
                 As you have probably guessed, the directories of the form "X-
                 stop-daemons" should contain init scripts of daemons that you
                 want stopped in mode X, while the directories of the form "X-
                 start-daemons"  should  contain  init scripts of daemons that
                 you want started in mode X. Of course, it is possible to  put
                 in  your  own handling of modes as well: the only requirement
                 on the scripts in the directories is  that  they  handle  the
                 "start" and "stop" commands, like init scripts usually do.

                 The  ordering  of  the  script handling is as follows. When a
                 mode is entered, the actions of the previous mode are undone,
                 in  reverse  order.  This means that if the previous mode had
                 done "daemon1 stop", "daemon2 stop" and "daemon3 start", then
                 the  undoing actions will be "daemon3 stop", "daemon2 start",
                 "daemon1 start". After that, the  stop-scripts  for  the  new
                 mode  are  called,  and  then  the  start-scripts are called.
                 Please note that  there  is  no  detection  of  commonalities
                 between  modes at this point, i.e., if the mode you’re coming
                 from and the mode you’re going to both specify that a  daemon
                 "X"  should  be  stopped,  then the daemon will be un-stopped
                 (that is, started) while leaving the previous mode, and  then
                 stopped again.

       BATT_STOP

       BATT_START

       LM_AC_STOP

       LM_AC_START

       NOLM_AC_STOP

       NOLM_AC_START

                 These  options allow you to stop services (through their init
                 scripts) in certain power states. Specify  a  space-separated
                 list  of  service names in these options.  These services are
                 started/stopped together with the files from the  directories
                 mentioned above.

É possível desabilitar sua função principal (desligar o HDD) do arquivo de configuração, ele ainda executará outras ações.

    
por 06.09.2009 / 04:19
0

Você pode usar este comando para interromper ou iniciar serviços:

sudo /etc/init.d/'preferred services' stop|start|restart
    
por 28.08.2009 / 18:51