在 ubuntu 上設定進程設定檔

在 ubuntu 上設定進程設定檔

我想知道是否可以為我的 ubuntu 筆記型電腦設定設定文件,以便:

  • 如果在電池模式下運行,請停用 apache/mysql/postgresql
  • 如果無線已停用,請停用所有嘗試連接到網路的進程。

答案1

我以前沒有在 Ubuntu 中遇到過這樣的設定檔的概念,所以我猜你不能立即做到這一點。

我的假設可能是錯的,但這很好。但是,假設沒有應用程式可以執行此操作,並且我強烈希望進行此設置,那麼現在我就開始執行此操作。

我將假設您正在運行 Gnome 來編寫本文,因為這是我最了解的環境。如果您處於其他桌面或控制台環境中,底層流程應該仍然有效。

Gnome 讓您可以透過以下方式配置系統行為的某些方面系統 > 首選項 > 電源管理。這調用gnome 電源首選項,並且它是由gnome 電源管理器守護進程。從 gnome 專案頁面我們知道gnome 電源管理器依靠 HAL 來了解筆記型電腦是否使用電池供電。

gnome 電源管理器

所以,火起來gnome 設備管理器看看 HAL 知道什麼。尋找條目電池。如果您只看到摘要選項卡,請啟用檢視 > 設備屬性。是的,我們需要兩個金鑰:電池.rechargeable.is_discharging電池.rechargeable.is_charging

gnome 設備管理器

現在我們知道我們需要什麼,我們必須找出如何透過命令列存取它。 HAL 附帶了命令列工具來存取此訊息,這很有幫助。我們首先運行

hal 設備 |較少的

並蒐索電池.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-屬性命令:

$ 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
       啟動-停止-程式模組可讓您啟動或停止程式
       當計算機切換到不同的電源狀態。

       CONTROL_START_STOP
                 如果啟用此選項,筆記型電腦模式工具將自動
                 為您自動啟動和停止守護程式或其他程式。這
                 守護程式的實際配置
                 停止/啟動是透過放置指向守護程序 init 的連結來完成的
                 以下目錄中的腳本:

                    /etc/筆記型電腦模式/batt-start

                    /etc/筆記型電腦模式/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啟動。
                 以及您自己對模式的處理:唯一的要求
                 目錄中的腳本的特徵是它們處理
                 “啟動”和“停止”命令,就像初始化腳本通常所做的那樣。

                 腳本處理的順序如下。當一個
                 進入模式後,先前模式的操作將被撤銷,
                 以相反的順序。這意味著如果之前的模式有
                 完成“daemon1 stop”、“daemon2 stop”和“daemon3 start”,然後
                 撤銷操作將是「daemon3 stop」、「daemon2 start」、
                 「daemon1 啟動」。之後,新的停止腳本
                 呼叫模式,然後呼叫啟動腳本。
                 請注意,沒有檢測到共通性
                 此時在模式之間,即,如果您要選擇的模式
                 from 和您要指定的模式都指定守護程式
                 「X」應該被停止,然後守護程式將被取消停止
                 (即開始)同時離開先前的模式,然後
                 又停了下來。

       電池停止

       電瓶啟動

       LM_AC_STOP

       LM_AC_START

       NOLM_AC_STOP

       NOLM_AC_START

                 這些選項可讓您停止服務(透過它們的 init
                 腳本)在某些電源狀態下。指定一個空格分隔
                 這些選項中的服務名稱清單。這些服務是
                 與目錄中的檔案一起啟動/停止
                 上文提到的。

可以從設定檔停用它的主要功能(旋轉硬碟),它仍然會運行其他操作。

答案3

您可以使用此命令來停止或啟動服務:

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

相關內容