系统管理指南:高级管理

系统记帐组件

系统记帐软件提供了可将数据组织为摘要文件和报告的 C 语言程序和 Shell 脚本。这些程序驻留在 /usr/lib/acct 目录中。记帐报告驻留在 /var/adm/acct 目录中。

每日记帐有助于执行四种类型的审计:

连接记帐

通过连接记帐可以确定以下信息:

要提供有关连接会话的记帐信息,系统需要存储以下数据:

这些记录是从系统程序(如 dateinitloginttymonacctwtmp)的输出中生成的。这些记录存储在 /var/adm/wtmpx 文件中。

wtmpx 文件中的项可以包含以下信息:

进程记帐

通过进程记帐可以跟踪有关系统中运行的每个进程的以下数据:

每次进程终止时,exit 程序便会收集此信息并将其写入 /var/adm/pacct 文件。

磁盘记帐

通过磁盘记帐可以收集有关每个用户在磁盘中的文件的以下数据并设置数据格式:

/usr/lib/acct/dodisk shell 脚本以一定的时间间隔收集上述数据,该时间间隔是由您向 /var/spool/cron/crontabs/root 文件中添加的项确定的。反过来,dodisk 脚本会调用 acctdiskacctdusg 命令。这些命令按登录名称收集磁盘使用情况的信息。


注意 – 注意 –

通过运行 dodisk 脚本收集的信息存储在 /var/adm/acct/nite/disktacct 文件中。下次运行 dodisk 脚本时将覆写此信息。因此,请避免在同一天中两次运行 dodisk 脚本。


对于随机写入的文件,acctdusg 命令计算的磁盘占用量可能比实际多,这会在文件中形成空洞。出现这种问题是由于 acctdusg 命令在确定文件大小时未读取文件的间接块。更确切地说,acctdusg 文件是通过检查文件 inode 中的当前文件大小值来确定文件大小的。

费用计算

chargefee 实用程序在 /var/adm/fee 文件中存储为用户提供的特殊服务的费用。例如,特殊服务可以是文件恢复。文件中的每项都由用户登录名、用户 ID 和费用组成。runacct 每天都会检查此文件,并将新项合并到记帐记录中。有关运行 chargefee 脚本以对用户计费的说明,请参见如何对用户计费

每日记帐的工作原理

以下是每日记帐的工作原理的分步概要说明:

  1. 将系统切换到多用户模式时,执行 /usr/lib/acct/startup 程序。startup 程序会执行多个调用每日记帐的其他程序。

  2. acctwtmp 程序向 /var/adm/wtmpx 文件中添加一条“引导”记录。在此记录中,系统名显示为 wtmpx 记录中的用户名。下表汇总了原始记帐数据的收集方式及存储位置。

    /var/adm 中的文件

    存储的信息 

    写入程序 

    格式 

    wtmpx

    连接会话  

    logininit

    二进制 

     

    更改

    date

    二进制 

     

    重新引导

    acctwtmp

    二进制 

     

    关闭

    shutacct

    二进制 

    pacctn

    进程 

    Kernel(当进程结束时)  

    二进制 

     

     

    turnacct switch(当原有文件达到 500 块时创建一个新文件)

    二进制 

    fee

    特殊费用 

    chargefee

    ASCII 

    acct/nite/disktacct

    使用的磁盘空间 

    dodisk

    二进制 

  3. 使用 -on 选项调用的 turnacct 脚本开始进程记帐。具体来讲,就是 turnacct 脚本使用 /var/adm/pacct 参数执行 accton 程序。

  4. 删除 Shell 脚本会“清除”由 runacct 脚本留在 sum 目录中的已保存的 pacctwtmpx 文件。

  5. logininit 程序通过向 /var/adm/wtmpx 文件中写入记录来记录连接会话。日期更改(使用带参数的日期)也会写入 /var/adm/wtmpx 文件中。使用 acctwtmp 命令进行重新引导和关闭也会记录到 /var/adm/wtmpx 文件中。

  6. 进程结束时,内核会使用 acct.h 格式在 /var/adm/pacct 文件中为每个进程写入一条记录。

    cron 命令每小时执行一次 ckpacct 脚本,以检查 /var/adm/pacct 文件的大小。如果文件大小超出了 500 块(缺省值),则会执行 turnacct switch 命令。(程序将 pacct 文件移至 pacctn 文件并创建一个新文件。)如果由于处理这些记录时出现故障而尝试重新启动 runacct 脚本,则有多个小型 pacct 文件的优点是显而易见的。

  7. cron 命令每晚都会执行 runacct 脚本。runacct 脚本会对记帐文件进行处理,从而按用户名生成命令概要和使用情况概要。将处理以下记帐文件: /var/adm/pacctn/var/adm/wtmpx/var/adm/fee/var/adm/acct/nite/disktacct

  8. runacct 脚本每天执行一次 /usr/lib/acct/prdaily 脚本,以便将每日记帐信息写入 /var/adm/acct/sum/rprtMMDD 文件中。

  9. monacct 脚本应每月执行一次(或以您确定的时间间隔执行,例如在每个财务周期结束时执行)。monacct 脚本会基于 sum 目录中存储的数据创建一个报告,该目录每天通过 runacct 脚本更新一次。创建报告后,monacct 脚本将“清除”sum 目录,以便为新的 runacct 数据准备目录文件。

系统关闭时执行的操作

如果使用 shutdown 命令关闭系统,则会自动执行 shutacct 脚本。shutacct 脚本会向 /var/adm/wtmpx 文件中写入一条原因记录并关闭进程记帐。