]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - libexec/rc/rc.d/accounting
amd64: use register macros for gdb_cpu_getreg()
[FreeBSD/FreeBSD.git] / libexec / rc / rc.d / accounting
1 #!/bin/sh
2 #
3 # $FreeBSD$
4 #
5
6 # PROVIDE: accounting
7 # REQUIRE: mountcritremote
8 # BEFORE: DAEMON
9 # KEYWORD: nojail
10
11 . /etc/rc.subr
12
13 name="accounting"
14 rcvar="accounting_enable"
15 accounting_command="/usr/sbin/accton"
16 accounting_file="/var/account/acct"
17
18 extra_commands="rotate_log"
19
20 start_cmd="accounting_start"
21 stop_cmd="accounting_stop"
22 rotate_log_cmd="accounting_rotate_log"
23
24 create_accounting_file()
25 {
26         install -o root -g wheel -m 0640 /dev/null "${accounting_file}"
27 }
28
29 accounting_start()
30 {
31         local _dir
32
33         _dir="${accounting_file%/*}"
34         if [ ! -d "$_dir" ]; then
35                 if ! mkdir -p -m 0750 "$_dir"; then
36                         err 1 "Could not create $_dir."
37                 fi
38         fi
39
40         if [ ! -e "$accounting_file" ]; then
41                 echo -n "Creating accounting file ${accounting_file}"
42                 create_accounting_file
43                 echo '.'
44         fi
45
46         echo "Turning on accounting."
47         ${accounting_command} ${accounting_file}
48 }
49
50 accounting_stop()
51 {
52         echo "Turning off accounting."
53         ${accounting_command}
54 }
55
56 accounting_rotate_log()
57 {
58         # Note that this function must handle being called as "onerotate_log"
59         # (by the periodic scripts) when accounting is disabled, and handle
60         # being called multiple times (by an admin making mistakes) without
61         # anything having actually rotated the old .0 file out of the way.
62
63         if [ -e "${accounting_file}.0" ]; then
64                 err 1 "Cannot rotate accounting log, ${accounting_file}.0 already exists."
65         fi
66
67         if [ ! -e "${accounting_file}" ]; then
68                 err 1 "Cannot rotate accounting log, ${accounting_file} does not exist."
69         fi
70
71         mv ${accounting_file} ${accounting_file}.0
72
73         if checkyesno accounting_enable; then
74                 create_accounting_file
75                 ${accounting_command} "${accounting_file}"
76         fi
77 }
78
79 load_rc_config $name
80 run_rc_command "$1"