在 Ubuntu 上设置进程配置文件

在 Ubuntu 上设置进程配置文件

我想知道是否可以为我的 ubuntu 笔记本电脑设置配置文件,以便:

  • 如果在电池模式下运行,请禁用 apache/mysql/postgresql
  • 如果无线被禁用,则禁用所有尝试连接到互联网的进程。

答案1

我之前没有遇到过 Ubuntu 中这种配置文件的概念,所以我猜你不能马上做到这一点。

我可能错了,但这样也不错。不过,假设没有应用程序可以做到这一点,而我又非常想这样做,那么现在我就可以开始做了。

我假设您运行的是 Gnome,因为这是我最了解的环境。如果您在其他桌面或控制台环境中,底层流程应该仍然有效。

Gnome 允许你通过以下方式配置系统行为的某些方面系统 > 首选项 > 电源管理.这要求gnome 电源偏好设置,并由gnome 电源管理器守护进程。从 gnome 项目页面我们知道gnome 电源管理器依靠 HAL 来知道笔记本电脑是否依靠电池供电。

gnome 电源管理器

所以,开火吧gnome 设备管理器看看 HAL 知道什么。查找电池。如果您只看到摘要选项卡,请启用查看 > 设备属性。是的,我们需要两个密钥:电池.可充电.正在放电电池.可充电.正在充电

gnome 设备管理器

现在我们知道了我们需要什么,我们必须找出如何通过命令行访问它。幸好 HAL 附带了命令行工具来访问这些信息。我们首先运行

hal 设备 | 更少

并搜索电池可充电正在放电键。备份,以便获取详细说明电池信息的块:

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
       启动/停止程序模块允许您启动或停止程序
       当计算机切换到不同的电源状态时。

       控制开始停止
                 如果启用此选项,笔记本电脑模式工具将自动
                 cally 为您启动和停止守护进程或其他程序。
                 守护进程的实际配置
                 停止/启动是通过放置指向守护进程的 init 的链接来完成的
                 以下目录中的脚本:

                    /etc/laptop-mode/batt-start

                    /etc/laptop-mode/batt-stop

                    /etc/笔记本电脑模式/lm-ac-start

                    /etc/笔记本电脑模式/lm-ac-stop

                    /etc/笔记本电脑模式/nolm-ac-start

                    /etc/笔记本电脑模式/nolm-ac-stop
                 你可能已经猜到了,“X-
                 stop-daemons”应该包含您
                 想要在模式 X 中停止,而格式为“X-
                 start-daemons”应该包含守护进程的初始化脚本,
                 你想以模式X启动。当然,也可以把
                 在你自己处理模式时也是如此:唯一的要求
                 目录中的脚本处理
                 “启动”和“停止”命令,就像初始化脚本通常做的那样。

                 脚本处理的顺序如下。当
                 进入模式后,前一个模式的操作将被撤消,
                 以相反的顺序。这意味着,如果前一种模式
                 完成“daemon1 stop”、“daemon2 stop”和“daemon3 start”,然后
                 撤消操作将是“daemon3 stop”,“daemon2 start”,
                 “daemon1 start”。之后,新的
                 模式被调用,然后启动脚本被调用。
                 请注意,没有发现共同点
                 此时模式之间,即如果你正在使用的模式
                 您将同时指定守护进程
                 “X”应该停止,然后守护进程将取消停止
                 (即启动)同时离开先前的模式,然后
                 又停了下来。

       电池停止

       电池启动

       LM_AC_停止

       LM_AC_开始

       停止

       启动

                 这些选项允许您停止服务(通过其 init
                 脚本)在某些电源状态下运行。请指定一个空格分隔的
                 这些选项中的服务名称列表。这些服务是
                 与目录中的文件一起启动/停止
                 上文提到的。

可以从配置文件中禁用其主要功能(降低硬盘转速),但它仍会运行其他操作。

答案3

您可以使用此命令来停止或启动服务:

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

相关内容