以下是每日记帐的工作原理的分步概要说明:
将系统切换到多用户模式时,执行 /usr/lib/acct/startup 程序。startup 程序会执行多个调用每日记帐的其他程序。
acctwtmp 程序向 /var/adm/wtmpx 文件中添加一条“引导”记录。在此记录中,系统名显示为 wtmpx 记录中的用户名。下表汇总了原始记帐数据的收集方式及存储位置。
| /var/adm 中的文件
| 存储的信息
| 写入程序
| 格式
|
---|
wtmpx
| 连接会话
| login、init
| 二进制
|
| 更改
| date
| 二进制
|
| 重新引导
| acctwtmp
| 二进制
|
| 关闭
| shutacct
| 二进制
|
pacctn
| 进程
| Kernel(当进程结束时)
| 二进制
|
| | turnacct switch(当原有文件达到 500 块时创建一个新文件)
| 二进制
|
fee
| 特殊费用
| chargefee
| ASCII
|
acct/nite/disktacct
| 使用的磁盘空间
| dodisk
| 二进制
|
使用 -on 选项调用的 turnacct 脚本开始进程记帐。具体来讲,就是 turnacct 脚本使用 /var/adm/pacct 参数执行 accton 程序。
删除 Shell 脚本会“清除”由 runacct 脚本留在 sum 目录中的已保存的 pacct 和 wtmpx 文件。
login 和 init 程序通过向 /var/adm/wtmpx 文件中写入记录来记录连接会话。日期更改(使用带参数的日期)也会写入 /var/adm/wtmpx 文件中。使用 acctwtmp 命令进行重新引导和关闭也会记录到 /var/adm/wtmpx 文件中。
进程结束时,内核会使用 acct.h 格式在 /var/adm/pacct 文件中为每个进程写入一条记录。
cron 命令每小时执行一次 ckpacct 脚本,以检查 /var/adm/pacct 文件的大小。如果文件大小超出了 500 块(缺省值),则会执行 turnacct switch 命令。(程序将 pacct 文件移至 pacctn 文件并创建一个新文件。)如果由于处理这些记录时出现故障而尝试重新启动 runacct 脚本,则有多个小型 pacct 文件的优点是显而易见的。
cron 命令每晚都会执行 runacct 脚本。runacct 脚本会对记帐文件进行处理,从而按用户名生成命令概要和使用情况概要。将处理以下记帐文件: /var/adm/pacctn、/var/adm/wtmpx、/var/adm/fee 和 /var/adm/acct/nite/disktacct。
runacct 脚本每天执行一次 /usr/lib/acct/prdaily 脚本,以便将每日记帐信息写入 /var/adm/acct/sum/rprtMMDD 文件中。
monacct 脚本应每月执行一次(或以您确定的时间间隔执行,例如在每个财务周期结束时执行)。monacct 脚本会基于 sum 目录中存储的数据创建一个报告,该目录每天通过 runacct 脚本更新一次。创建报告后,monacct 脚本将“清除”sum 目录,以便为新的 runacct 数据准备目录文件。