Next | Prev | Up | Top | Contents | Index
runacct
runacct is the main daily accounting shell procedure. It is normally initiated by cron during nonpeak hours. runacct processes connect, fee, disk, and process accounting files. It also prepares daily and cumulative summary files for use by prdaily or for billing purposes. The following files produced by runacct are of particular interest:
- nite/lineuse
- Produced by acctcon, reads the wtmp file and produces usage statistics for each terminal line on the system. This report is especially useful for detecting bad lines. If the ratio between the number of logoffs to logins exceeds about 3:1, it is quite possible that the line is failing.
- nite/daytacct
- The total accounting file for the previous day in tacct.h format.
- sum/tacct
- The accumulation of each day's nite/daytacct can be used for billing purposes. It is restarted each month or fiscal period by the monacct procedure.
- sum/daycms
- Produced by the acctcms program. It contains the daily command summary. The ASCII version of this file is nite/daycms.
- sum/cms
- The accumulation of each day's command summaries. It is restarted by the execution of monacct. The ASCII version is nite/cms.
- sum/loginlog
- Produced by the last login shell procedure. It maintains a record of the last time each login name was used.
- sum/rprtMMDD
-
Each execution of runacct saves a copy of the daily report that can be printed by prdaily.
runacct takes care not to damage files in the event of errors. A series of protection mechanisms are used that attempt to recognize an error, provide intelligent diagnostics, and terminate processing in such a way that runacct can be restarted with minimal intervention. It records its progress by writing descriptive messages into the file active. (Files used by runacct are assumed to be in the nite directory unless otherwise noted.) All diagnostics output during the execution of runacct are written into fd2log. runacct complains if the files lock and lockl exist when invoked. The lastdate file contains the month and day runacct was last invoked and is used to prevent more than one execution per day. If runacct detects an error, a message is written to /dev/console, mail is sent to root and adm, locks are removed, diagnostic files are saved, and execution is terminated.
To allow runacct to be restartable, processing is broken down into separate reentrant states. A file is used to remember the last state completed. When each state completes, statefile is updated to reflect the next state. After processing for the state is complete, statefile is read and the next state is processed. When runacct reaches the CLEANUP state, it removes the locks and terminates. States are executed as follows:
- SETUP
- The command turnacct switch is executed. The process accounting files, /var/adm/pacct?, are moved to /var/adm/Spacct?.MMDD. The /etc/wtmp file is moved to /var/adm/acct/nite/wtmp.MMDD with the current time added on the end.
- WTMPFIX
- The wtmpfix program checks the wtmp file in the nite directory for correctness. Some date changes cause acctcon1 to fail, so wtmpfix attempts to adjust the time stamps in the wtmp file if a date change record appears.
- CONNECT1
- Connect session records are written to ctmp in the form of ctmp.h. The lineuse file is created, and the reboots file is created showing all of the boot records found in the wtmp file.
ctmp is converted to ctacct.MMDD, which are connect accounting records. (Accounting records are in tacct.h format.)
The acctprc1 and acctprc2 programs are used to convert the process accounting files, /var/adm/Spacct?.MMDD, into total accounting records in ptacct?.MMDD. The Spacct and ptacct files are correlated by number so that if runacct fails, the unnecessary reprocessing of Spacct files will not occur. One precaution should be noted: when restarting runacct in this state, remove the last ptacct file, because it will not be complete.
- MERGE
- Merge the process accounting records with the connect accounting records to form daytacct.
- FEES
- Merge in any ASCII tacct records from the file fee into daytacct.
- DISK
- On the day after the dodisk procedure runs, merge disktacct with daytacct.
- MERGETACCT
-
Merge daytacct with sum/tacct, the cumulative total accounting file. Each day, daytacct is saved in sum/tacctMMDD, so that sum/tacct can be recreated in case it is corrupted or lost.
- CMS
- Merge in today's command summary with the cumulative command summary file sum/cms. Produce ASCII and internal format command summary files.
- USEREXIT
- Any installation-dependent (local) accounting programs can be included here.
- CLEANUP
- Clean up temporary files, run prdaily and save its output in sum/rprtMMDD, remove the locks, then exit.
Recovering from a Failure
The runacct procedure can fail for a variety of reasons--usually due to a system crash, /usr running out of space, or a corrupted wtmp file. If the activeMMDD file exists, check it first for error messages. If the active file and lock files exist, check fd2log for any mysterious messages. The following are error messages produced by runacct and the recommended recovery actions:
ERROR: locks found, run aborted
The files /var/adm/acct/nite/lock and /var/adm/acct/nite/lock1 were found. These files must be removed before runacct can restart.
ERROR: acctg already run for date: check /var/adm/acct/nite/lastdate
The date in lastdate and today's date are the same. Remove lastdate.
ERROR: turnacct switch returned rc=?
Check the integrity of turnacct and accton. The accton program must be owned by root and have the setuid bit set.
ERROR: Spacct?.MMDD already exists
File setups probably already run. Check status of files, then run setups manually.
ERROR: /var/adm/acct/nite/wtmp.MMDD already exists, run setup manually
Self-explanatory.
ERROR: wtmpfix detected a corrupted wtmp file. Use fwtmp to correct the corrupted file.
Self-explanatory.
ERROR: connect acctg failed: check /var/adm/acct/nite/log
The acctcon1 program encountered a bad wtmp file. Use fwtmp to correct the bad file.
ERROR: Invalid state, check /var/adm/acct/nite/active
The file statefile is probably corrupted. Check statefile for irregularities and read active before restarting.
Restarting runacct
The runacct program, called without arguments, assumes that this is the first invocation of the day. The argument MMDD is necessary if runacct is being restarted and specifies the month and day for which runacct will rerun the accounting. The entry point for processing is based on the contents of statefile. To override statefile, include the desired state on the command line. For example, to start runacct, use the command:
nohup runacct 2 /var/adm/acct/nite/fd2log &
To restart runacct:
nohup runacct 0601 2 /var/adm/acct/nite/fd2log &
To restart runacct at a specific state:
nohup runacct 0601 WTMPFIX 2 /var/adm/acct/nite/fd2log &
Next | Prev | Up | Top | Contents | Index