Ubuntu でプロセス プロファイルを設定する

Ubuntu でプロセス プロファイルを設定する

Ubuntu ラップトップのプロファイルを次のように設定できるかどうか疑問に思っています。

  • バッテリーモードで実行している場合は、apache/mysql/postgresql を無効にする
  • ワイヤレスが無効になっている場合は、インターネットに接続しようとしているすべてのプロセスを無効にします。

答え1

これまで Ubuntu でこのようなプロファイルの概念に出会ったことがないので、すぐにこれを行うことはできないと思います。

私がこれを想定するのは間違っているかもしれませんが、それは良いことです。ただし、これを行うアプリが存在しないと仮定し、これを設定したいという強い願望があったので、ここでそれを実行します。

私は、Gnome が私の最もよく知っている環境であるため、Gnome を実行しているという前提でこれを書きます。他のデスクトップまたはコンソール環境を使用している場合でも、基礎となるプロセス フローは有効であるはずです。

Gnomeでは、システムの動作のいくつかの側面を次のように設定できます。システム > 設定 > 電源管理。これはgnome 電源設定、そしてそれはgnome 電源マネージャーデーモンプロセス。gnomeプロジェクトのページから、gnome 電源マネージャーラップトップがバッテリー電源で動作しているかどうかを知るには HAL に依存します。

gnome 電源マネージャー

だから、火をつけろgnome デバイス マネージャーHALが何を知っているか見てみましょう。バッテリー概要タブのみが表示される場合は、表示 > デバイスのプロパティはい、必要なキーは 2 つあります。バッテリー充電可能、放電中そしてバッテリー充電可能。充電中

gnome デバイス マネージャー

必要なものがわかったので、コマンドラインからアクセスする方法を見つけなければなりません。HALにはこの情報にアクセスするためのコマンドラインツールが付属しています。まず、

hal-device | 少ない

そして検索バッテリー充電可能、放電中キーを押します。バックアップして、バッテリーの詳細情報が記されたブロックを取得します。

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-get-property指示:

$ 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を停止します

これをどう改善すればよいでしょうか? これをしばらく実行して問題点をすべて解決したら、これを起動時に起動するサービスにします。この回答を確認してくださいここ起動時に自動的に開始するスクリプトを追加する手順については、こちらをご覧ください。

これを行わない場合は、これをチェックしてください質問このスクリプトでルート権限を必要とするコマンドを実行する方法については、こちらをご覧ください。

質問の一部にしか答えていないことには気づいていますが、ワイヤレス セクションも同様の方法で組み込むことができるはずです。ワイヤレスが無効になっているかどうかを知るには、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
       開始・停止プログラムモジュールを使用すると、プログラムを開始または停止できます。
       コンピューターが別の電源状態に切り替わるとき。

       コントロール_スタート_ストップ
                 このオプションを有効にすると、ラップトップモードツールは自動的に
                 デーモンやその他のプログラムを自動的に起動および停止します。
                 どのデーモンが実行されるかについての実際の設定
                 停止/開始はデーモンのinitへのリンクを配置することで行われます
                 次のディレクトリにあるスクリプト:

                    /etc/ラップトップモード/batt-start

                    /etc/ラップトップモード/batt-stop

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

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

                    /etc/ラップトップモード/nolm-ac-start

                    /etc/laptop-mode/nolm-ac-stop
                 おそらくご想像のとおり、「X-
                 stop-daemons"には、停止するデーモンのinitスクリプトが含まれている必要があります。
                 モードXで停止したいが、ディレクトリは「X-
                 「start-daemons」には、デーモンのinitスクリプトが含まれている必要があります。
                 モードXで開始したい場合、もちろん、
                 モードの扱いについても同様に:唯一の要件は
                 ディレクトリ内のスクリプトの重要な点は、
                 init スクリプトが通常行うのと同様に、「start」コマンドと「stop」コマンドを実行します。

                 スクリプト処理の順序は次のとおりです。
                 モードに入ると、前のモードのアクションは元に戻され、
                 逆の順序で行われます。つまり、前のモードが
                 「daemon1 stop」、「daemon2 stop」、および「daemon3 start」を実行してから、
                 元に戻すアクションは「daemon3 stop」、「daemon2 start」、
                 「daemon1 start」。その後、新しい
                 モードが呼び出され、その後、開始スクリプトが呼び出されます。
                 共通点は検出されませんのでご注意ください
                 この時点でのモード間の相違、つまり、あなたが来ているモードが
                 からとモードでは、デーモンが
                 「X」を停止するとデーモンは停止解除されます
                 (つまり、開始)前のモードを終了し、その後
                 再び停止しました。

       バッテリー停止

       バッテリー

       LM_AC_STOP

       LM_AC_START

       いいえ

       ノーム

                 これらのオプションを使用すると、サービスを停止できます(init
                 特定の電源状態でスクリプトを実行するかどうかを指定します。スペースで区切った
                 これらのオプションにはサービス名のリストがあります。これらのサービスは
                 ディレクトリのファイルと一緒に開始/停止します
                 上記の通り。

設定ファイルから主な機能 (HDD の回転停止) を無効にすることは可能ですが、他のアクションは引き続き実行されます。

答え3

このコマンドを使用して、サービスを停止または開始できます。

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

関連情報