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


2

私のUbuntuラップトップのプロファイルを次のように設定することが可能かどうか疑問に思いました。

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

回答:


4

私はUbuntuでそのようなプロファイルの概念に出会ったことは一度もありません。ですから、すぐにはこれができないと思います。

私はこれを仮定するのが間違っているかもしれません、それはいいことです。しかし、これを実行するためのアプリがなく、これを設定することを強く望んでいると仮定して、今ここでそれを取り上げます。

私はあなたがGnomeを走らせているという仮定のもとにこれを書くつもりです。他のデスクトップまたはコンソール環境にいる場合でも、基礎となるプロセスフローは有効のままです。

Gnomeでは、システムの振る舞いのいくつかの側面を設定することができます。 システム>設定>パワー管理 。これは gnome-power-preferences そしてそれは gnome-power-manager デーモンプロセス。 GNOMEプロジェクトのページから私たちはそれを知っています gnome-power-manager ラップトップがバッテリ電源で動作しているかどうかを知るためにHALに依存します。

gnome-power-manager

だから、起動する GNOMEデバイスマネージャ HALが知っていることを見るために。のエントリを探す 電池 。要約タブしか表示されない場合は、有効にします。 表示>デバイスプロパティ 。うん、私たちが必要とする2つのキーがあります。 battery.rechargeable.is_dischargeging そして battery.rechargeable.is_charging

gnome-device-manager

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

ハルデバイスもっと少なく

そしての検索 battery.rechareable.is_discharging キー。バックアップして、あなたのバッテリー情報を詳述したブロックを取得します。

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 stop

どうすればこれを改善できますか?しばらくこれを実行してすべてのキンクを解決したら、これを起動時に起動するサービスにします。この答えをチェック ここに 起動時に自動的に起動するスクリプトを追加する方法については。

そうしないことにした場合は、これをチェックしてください。 質問 このスクリプトに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

1
これはちょうど私が今までにスタックオーバーフローサイトのいずれかで見た中で最高の答えかもしれません。
Allain Lalonde

1
これは素晴らしい!あなたが提供したこの例には非常に多くの用途があります。 HALから属性にアクセスし、それに応じて反応することができるスクリプトには多くの可能性があります。ありがとう…
Matt Cofer

1

laptop-mode-tools あなたが求めていることをすることができます。

   /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.

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


0

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

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

もっと例を見ながら、あるいはサンプルのbashスクリプトを提供してもらえますか。
dassouki

sudo /etc/init.d/apache2 restart #restart apache webserver
Sajad Bahmani
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.