系统管理指南:高级管理

维护记帐信息

本节介绍如何修复损坏的系统记帐文件以及如何重新启动 runacct 脚本。

修复损坏的文件并更正 wtmpx 错误

遗憾的是,系统记帐并不十分安全。有时候,文件会损坏或丢失。有些文件可以忽略,也可以从备份中恢复。但是,有些文件则必须修复,才能维护系统记帐的完整性。

wtmpx 文件可能会引发每日系统记帐操作中的大多数问题。手动更改日期并且系统处于多用户模式时,会向 /var/adm/wtmpx 文件中写入一组日期更改记录。wtmpfix 实用程序旨在出现日期更改时调整 wtmp 记录中的时间标记。但是,部分日期更改和重新引导的组合会跳过 wtmpfix 实用程序并导致 acctcon 程序失败。

Procedure如何修复损坏的 wtmpx 文件

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 转到 /var/adm 目录。

  3. wtmpx 文件从二进制格式转换为 ASCII 格式。


    # /usr/lib/acct/fwtmp < wtmpx > wtmpx.ascii 
    
  4. 编辑 wtmpx.ascii 文件以删除损坏的记录。

  5. wtmpx.ascii 文件转换回二进制文件。


    # /usr/lib/acct/fwtmp -ic < wtmpx.ascii > wtmpx
    

    有关更多信息,请参见 fwtmp(1M) 手册页。

更正 tacct 错误

如果要向用户收取系统资源费用,则 /var/adm/acct/sum/tacct 文件的完整性极为重要。有时候,会出现异常的 tacct 记录,其中包括负数、重复的用户 ID 或用户 ID 65535。首先,使用 prtacct 脚本列显 /var/adm/acct/sum/tacctprev 文件,以检查该文件。如果内容没有问题,则修补最新的 /var/adm/acct/sum/tacct MMDD 文件。然后,重新创建 /var/adm/acct/sum/tacct 文件。以下步骤概括了一个简单的修补过程。

Procedure如何修复 tacct 错误

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 转到 /var/adm/acct/sum 目录。

  3. tacctMMDD 文件从二进制格式转换为 ASCII 格式。


    # /usr/lib/acct/acctmerg -v < tacctMMDD > xtacct
    

    MMDD 是一对表示月份和日期的两位数。

  4. 编辑 xtacct 文件,删除损坏的记录并将重复记录写入另一个文件。

  5. xtacct 文件从 ASCII 格式转换为二进制格式。


    # /usr/lib/acct/acctmerg -i < xtacct > tacctMMDD
    
  6. 将文件 tacctprevtacct.MMDD 合并到 tacct 文件中。


    # /usr/lib/acct/acctmerg < tacctprev tacctMMDD > tacct
    

重新启动 runacct 脚本

runacct 脚本失败的原因可能有多种。

以下是最常见的原因:

如果存在 active.MMDD 文件,请先检查该文件中是否有错误消息。如果存在 activelock 文件,请检查 fd2log 文件中是否有任何相关消息。

如果不带任何参数运行 runacct 脚本,则该脚本会假定这一次调用是当天的第一次调用。如果 runacct 脚本正在重新启动并指定 runacct 脚本重新运行记帐的月份和日期,则参数 MMDD 是必需的。进行处理的入口点基于 statefile 文件的内容。要覆盖 statefile 文件,请在命令行中包括所需的状态。有关可用状态的说明,请参见 runacct(1M) 手册页。


注意 – 注意 –

手动运行 runacct 程序时,请确保以用户身份 adm 运行该程序。


Procedure如何重新启动 runacct 脚本

  1. 转到 /var/adm/acct/nite 目录。


    $ cd /var/adm/acct/nite
    
  2. 删除 lastdate 文件和所有 lock* 文件(如果有)。


    $ rm lastdate lock*
    

    lastdate 文件包含上次运行 runacct 程序的日期。在下一步中重新启动 runacct 脚本将重新创建此文件。

  3. 重新启动 runacct 脚本。


    $ /usr/lib/acct/runacct MMDD [state] 2> /var/adm/acct/nite/fd2log &
    
    MMDD

    由两位数指定的月份和日期。

    state

    指定 runacct 脚本处理开始的状态或起始点。