system/corennnnn
修訂 | 515f091f5e7201ef5e4fef867f4ed29a8fda749a (tree) |
---|---|
時間 | 2016-07-14 08:53:54 |
作者 | Mark Salyzyn <salyzyn@goog...> |
Commiter | Mark Salyzyn |
logpersist: incorporate size and buffer tunables
- Add hidden -n and -b flags that propagate to the underlying
- Add --clear for start command so it clears before starting
- shell script bloating up to deal with option validation and
ToDo:
- Deprecate shell script and replace with Eng and Userdebug
Bug: 28120456
Bug: 28788401
Change-Id: I0dff8acaa1e5c929454760cfa2801924956bc25d
@@ -2,10 +2,10 @@ on property:persist.logd.logpersistd=logcatd | ||
2 | 2 | # all exec/services are called with umask(077), so no gain beyond 0700 |
3 | 3 | mkdir /data/misc/logd 0700 logd log |
4 | 4 | # logd for write to /data/misc/logd, log group for read from pstore (-L) |
5 | - exec - logd log -- /system/bin/logcat -L -b all -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r 1024 -n 256 | |
5 | + exec - logd log -- /system/bin/logcat -L -b ${persist.logd.logpersistd.buffer:-all} -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r 1024 -n ${persist.logd.logpersistd.size:-256} | |
6 | 6 | start logcatd |
7 | 7 | |
8 | -service logcatd /system/bin/logcat -b all -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r 1024 -n 256 | |
8 | +service logcatd /system/bin/logcat -b ${persist.logd.logpersistd.buffer:-all} -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r 1024 -n ${persist.logd.logpersistd.size:-256} | |
9 | 9 | class late_start |
10 | 10 | disabled |
11 | 11 | # logd for write to /data/misc/logd, log group for read from log daemon |
@@ -1,5 +1,5 @@ | ||
1 | 1 | #! /system/bin/sh |
2 | -# logpersist cat start and stop handlers | |
2 | +# logpersist cat, start and stop handlers | |
3 | 3 | progname="${0##*/}" |
4 | 4 | case `getprop ro.build.type` in |
5 | 5 | userdebug|eng) ;; |
@@ -7,36 +7,134 @@ userdebug|eng) ;; | ||
7 | 7 | exit 1 |
8 | 8 | ;; |
9 | 9 | esac |
10 | + | |
10 | 11 | data=/data/misc/logd |
11 | 12 | property=persist.logd.logpersistd |
12 | 13 | service=logcatd |
13 | -if [ X"${1}" = X"-h" -o X"${1}" = X"--help" ]; then | |
14 | - echo "${progname%.*}.cat - dump current ${service%d} logs" | |
15 | - echo "${progname%.*}.start - start ${service} service" | |
16 | - echo "${progname%.*}.stop [--clear] - stop ${service} service" | |
17 | - exit 0 | |
14 | +size_default=256 | |
15 | +buffer_default=all | |
16 | +args="${@}" | |
17 | + | |
18 | +size=${size_default} | |
19 | +buffer=${buffer_default} | |
20 | +clear=false | |
21 | +while [ ${#} -gt 0 ]; do | |
22 | + case ${1} in | |
23 | + -c|--clear) clear=true ;; | |
24 | + --size=*) size="${1#--size=}" ;; | |
25 | + --rotate-count=*) size="${1#--rotate-count=}" ;; | |
26 | + -n|--size|--rotate-count) size="${2}" ; shift ;; | |
27 | + --buffer=*) buffer="${1#--buffer=}" ;; | |
28 | + -b|--buffer) buffer="${2}" ; shift ;; | |
29 | + -h|--help|*) | |
30 | + LEAD_SPACE_="`echo ${progname%.*} | tr '[ -~]' ' '`" | |
31 | + echo "${progname%.*}.cat - dump current ${service%d} logs" | |
32 | + echo "${progname%.*}.start [--size=<size_in_kb>] [--buffer=<buffers>] [--clear]" | |
33 | + echo "${LEAD_SPACE_} - start ${service} service" | |
34 | + echo "${progname%.*}.stop [--clear] - stop ${service} service" | |
35 | + case ${1} in | |
36 | + -h|--help) exit 0 ;; | |
37 | + *) echo ERROR: bad argument ${@} >&2 ; exit 1 ;; | |
38 | + esac | |
39 | + ;; | |
40 | + esac | |
41 | + shift | |
42 | +done | |
43 | + | |
44 | +if [ -z "${size}" -o "${size_default}" = "${size}" ]; then | |
45 | + unset size | |
18 | 46 | fi |
47 | +if [ -n "${size}" ] && | |
48 | + ! ( [ 0 -lt "${size}" ] && [ 2048 -ge "${size}" ] ) >/dev/null 2>&1; then | |
49 | + echo ERROR: Invalid --size ${size} >&2 | |
50 | + exit 1 | |
51 | +fi | |
52 | +if [ -z "${buffer}" -o "${buffer_default}" = "${buffer}" ]; then | |
53 | + unset buffer | |
54 | +fi | |
55 | +if [ -n "${buffer}" ] && ! logcat -b ${buffer} -g >/dev/null 2>&1; then | |
56 | + echo ERROR: Invalid --buffer ${buffer} >&2 | |
57 | + exit 1 | |
58 | +fi | |
59 | + | |
19 | 60 | case ${progname} in |
20 | 61 | *.cat) |
21 | - su 1036 ls "${data}" | | |
62 | + if [ -n "${size}${buffer}" -o "true" = "${clear}" ]; then | |
63 | + echo WARNING: Can not use --clear, --size or --buffer with ${progname%.*}.cat >&2 | |
64 | + fi | |
65 | + su logd ls "${data}" | | |
22 | 66 | tr -d '\r' | |
23 | 67 | sort -ru | |
24 | 68 | sed "s#^#${data}/#" | |
25 | - su 1036 xargs cat | |
69 | + su logd xargs cat | |
26 | 70 | ;; |
27 | 71 | *.start) |
28 | - su 0 setprop ${property} ${service} | |
72 | + current_buffer="`getprop ${property}.buffer`" | |
73 | + current_size="`getprop ${property}.size`" | |
74 | + if [ "${service}" = "`getprop ${property}`" ]; then | |
75 | + if [ "true" = "${clear}" ]; then | |
76 | + su root stop ${service} | |
77 | + su root setprop ${property} "" | |
78 | + # 20ms done, guarantees content stop before rm | |
79 | + sleep 1 | |
80 | + elif [ "${buffer}|${size}" != "${current_buffer}|${current_size}" ]; then | |
81 | + echo "ERROR: Changing existing collection parameters from" >&2 | |
82 | + if [ "${buffer}" != "${current_buffer}" ]; then | |
83 | + a=${current_buffer} | |
84 | + b=${buffer} | |
85 | + if [ -z "${a}" ]; then a="${default_buffer}"; fi | |
86 | + if [ -z "${b}" ]; then b="${default_buffer}"; fi | |
87 | + echo " --buffer ${a} to ${b}" >&2 | |
88 | + fi | |
89 | + if [ "${size}" != "${current_size}" ]; then | |
90 | + a=${current_size} | |
91 | + b=${size} | |
92 | + if [ -z "${a}" ]; then a="${default_size}"; fi | |
93 | + if [ -z "${b}" ]; then b="${default_size}"; fi | |
94 | + echo " --size ${a} to ${b}" >&2 | |
95 | + fi | |
96 | + echo " Are you sure you want to do this?" >&2 | |
97 | + echo " Suggest add --clear to erase data and restart with new settings." >&2 | |
98 | + echo " To blindly override and retain data, ${progname%.*}.stop first." >&2 | |
99 | + exit 1 | |
100 | + fi | |
101 | + fi | |
102 | + if [ "true" = "${clear}" ]; then | |
103 | + su logd,misc rm -rf "${data}" | |
104 | + fi | |
105 | + if [ -n "${buffer}${current_buffer}" ]; then | |
106 | + su root setprop ${property}.buffer "${buffer}" | |
107 | + fi | |
108 | + if [ -n "${size}${current_size}" ]; then | |
109 | + su root setprop ${property}.size "${size}" | |
110 | + fi | |
111 | + # ${service}.rc does the heavy lifting with the following trigger | |
112 | + su root setprop ${property} ${service} | |
29 | 113 | getprop ${property} |
114 | + # 20ms done, to permit process feedback check | |
30 | 115 | sleep 1 |
116 | + # also generate an error return code if not found running, bonus | |
31 | 117 | ps -t | grep "${data##*/}.*${service%d}" |
32 | 118 | ;; |
33 | 119 | *.stop) |
34 | - su 0 stop ${service} | |
35 | - su 0 setprop ${property} "" | |
36 | - [ X"${1}" != X"-c" -a X"${1}" != X"--clear" ] || | |
37 | - ( sleep 1 ; su 1036,9998 rm -rf "${data}" ) | |
120 | + if [ -n "${size}${buffer}" ]; then | |
121 | + echo "WARNING: Can not use --size or --buffer with ${progname%.*}.stop" >&2 | |
122 | + fi | |
123 | + su root stop ${service} | |
124 | + su root setprop ${property} "" | |
125 | + if [ -n "`getprop ${property}.buffer`" ]; then | |
126 | + su root setprop ${property}.buffer "" | |
127 | + fi | |
128 | + if [ -n "`getprop ${property}.size`" ]; then | |
129 | + su root setprop ${property}.size "" | |
130 | + fi | |
131 | + if [ "true" = "${clear}" ]; then | |
132 | + # 20ms done, guarantees content stop before rm | |
133 | + sleep 1 | |
134 | + su logd,misc rm -rf "${data}" | |
135 | + fi | |
38 | 136 | ;; |
39 | 137 | *) |
40 | - echo "Unexpected command ${0##*/} ${@}" >&2 | |
138 | + echo "ERROR: Unexpected command ${0##*/} ${args}" >&2 | |
41 | 139 | exit 1 |
42 | 140 | esac |