runacct 脚本
主要的每日记帐脚本 runacct 通常由 cron 命令在正常工作时间之外调用。runacct 脚本可以处理连接、费用、磁盘和进程记帐文件。此脚本还可准备每日摘要文件和累积摘要文件,以供 prdaily 和 monacct 脚本记帐。
runacct 脚本可在发生错误时防止文件受到损坏。
使用一系列保护机制来执行以下任务:
该脚本通过向 active 文件中写入描述性消息来记录其进度。除非另有说明,否则假定 runacct 脚本所使用的文件位于 /var/adm/acct/nite 目录中。runacct 脚本执行期间的所有诊断输出都写入 fd2log 文件中。
调用 runacct 脚本时,将会创建 lock 和 lock1 文件。这些文件可防止同时执行 runacct 脚本。如果调用 runacct 程序时已经存在上述文件,则该程序将列显错误消息。lastdate 文件中包含上次调用
runacct 脚本的月份和日期,以避免每天多次执行脚本。
如果 runacct 脚本检测到错误,则会发生以下情况:
-
向控制台写入一条消息
-
向 root 和 adm 发送电子邮件
-
可能删除锁定
-
保存诊断
-
执行结束
有关如何重新启动 runacct 脚本的说明,请参见如何重新启动 runacct 脚本。
要允许重新启动 runacct 脚本,需要将处理细分为不同的可重复执行状态。statefile 文件用于跟踪完成的上一个状态。当每个状态完成时,都会更新 statefile 文件,以反映下一个状态。该状态的处理完成后,将读取 statefile 文件并处理下一个状态。当 runacct 脚本达到 CLEANUP 状态时,它将删除锁定并结束。将按下表所示来执行状态。
表 10-1 runacct 脚本的状态
|
|
SETUP |
执行 turnacct switch 命令以创建新的 pacct 文件。/var/adm/pacct n 进程记帐文件(pacct 文件除外)被移至 /var/adm/Spacct n.MMDD
文件。/var/adm/wtmpx 文件被移至 /var/adm/acct/nite/wtmp.MMDD 文件(在结尾添加了当前时间记录)并创建一个新 /var/adm/wtmp 文件。closewtmp 和 utmp2wtmp 程序将向 wtmp.MMDD 文件和新的 wtmpx
文件中添加记录,以便 对当前登录的用户进行说明。 |
WTMPFIX |
wtmpfix 程序检查 nite 目录中的 wtmp.MMDD 文件是否正确。由于某些日期更改会导致 acctcon 程序失败,所以 wtmpfix 程序会在有日期更改记录时尝试调整
wtmpx 文件中的时间戳。此程序还可删除 wtmpx 文件中的任何已损坏项。将 wtmp.MMDD 文件的已修复版本写入 tmpwtmp 文件。 |
CONNECT |
acctcon 程序用于在文件 ctacct.MMDD 中记录连接记帐记录。这些记录使用
tacct.h 格式。此外,acctcon 程序还创建 lineuse 和 reboots 文件。reboots 文件会记录在 wtmpx 文件中找到的所有引导记录。 |
PROCESS |
acctprc
程序用于将 /var/adm/Spacctn.MMDD 进程记帐文件转换为 ptacctn.MMDD 文件中的完整记帐记录。Spacct 和 ptacct 文件通过数字进行关联,这样在 runacct 脚本失败时,将不处理 Spacct 文件。
|
MERGE |
acctmerg 程序将进程记帐记录与连接记帐记录合并,以形成 daytacct 文件。 |
FEES |
acctmerg 程序将 fee 文件中的 ASCII tacct 记录合并到 daytacct 文件中。
|
DISK |
dodisk 脚本可生成 disktacct 文件。如果 dodisk 脚本已运行并生成 disktacct 文件,则 DISK 程序会将该文件合并到 daytacct
文件中,并将 disktacct 文件移至 /tmp/disktacct.MMDD 文件。 |
MERGETACCT |
acctmerg 程序将 daytacct 文件与 sum/tacct 文件(累计总记帐文件)合并。每天都将 daytacct
文件保存到 sum/tacct.MMDD 文件中,这样便可在 sum/tacct 文件损坏或丢失时重新创建该文件。 |
CMS |
acctcms 程序多次运行。第一次运行该程序是为了使用 Spacct n 文件生成命令摘要,并向 sum/daycms 文件写入数据。第二次运行 acctcms
程序是为了将 sum/daycms 文件与 sum/cms 累积命令摘要文件合并。最后,再运行 acctcms 程序,以生成 nite/daycms 和 nite/cms,即分别来自 sum/daycms 和
sum/cms 的 ASCII 文件。lastlogin 程序用于创建 /var/adm/acct/sum/loginlog 日志文件。此文件将报告每个用户的上次登录时间。如果 runacct 脚本在午夜后运行,则显示某些用户上次登录时间的日期会与正确日期相差一天。 |
USEREXIT |
任何与安装相关(本地)的记帐程序都可在此点运行。runacct 脚本预计此程序为 /usr/lib/acct/runacct.local
程序。 |
CLEANUP |
此状态可清除临时文件、运行 prdaily 脚本、将其输出保存至 sum/rpt.MMDD 文件、删除锁定,然后退出。 |
|
| 注意 - 如果以 CLEANUP 状态重新启动 runacct 脚本,请删除最后一个 ptacct 文件,因为该文件将不完整。
|