re-factored start script
Costa Tsaousis (ktsaou) committed
Oct 14, 2015 at 00:41 UTC
f18acffe59da724a4ef5cd0650b803af8be6f40e
1 file changed
+89
-80
netdata.start
+89
-80
@@ -2,125 +2,134 @@
2
3
base="`dirname "$0"`"
4
5
-if [ ! -d "$base" -o ! -d "$base/web" ]
5
+if [ ! -d "${base}" ]
6
then
7
echo >&2 "Cannot find my home directory '${base}'."
8
exit 1
9
fi
10
-cd "$base" || exit 1
10
+cd "${base}" || exit 1
11
12
-# the detail of the data that will be kept in netdata
13
-NETDATA_CONFIG_INTERNAL_UPDATE_EVERY=1
12
15
-# how many entries to keep in memory
16
-NETDATA_CONFIG_INTERNAL_HISTORY_LINES=3600
13
+# -----------------------------------------------------------------------------
14
+# load options from the configuration file
15
18
-# the user to run netdata under
19
-NETDATA_CONFIG_USER=nobody
16
+config_option() {
17
+ local key="${1}" value="${2}" line=
18
21
-# set to 1, to enable debugging
22
-NETDATA_CONFIG_DEBUG=0
19
+ if [ -f "conf.d/netdata.conf" ]
20
+ then
21
+ line="$( grep "^[[:space:]]*${key}[[:space:]]*=[[:space:]]*" "conf.d/netdata.conf" | head -n 1 )"
22
+ [ ! -z "${line}" ] && value="$( echo "${line}" | cut -d '=' -f 2 | sed -e "s/^[[:space:]]\+//g" -e "s/[[:space:]]\+$//g" )"
23
+ fi
24
24
-# our port
25
-NETDATA_CONFIG_PORT=19999
25
+ echo "${value}"
26
+}
27
27
-NETDATA_CONFIG_CONF_DIR="conf.d"
28
-NETDATA_CONFIG_WEB_DIR="web"
29
-NETDATA_CONFIG_CACHE_DIR="cache"
30
-NETDATA_CONFIG_LOG_DIR="log"
28
+# user
29
+defuser="nobody"
30
+[ ! "${UID}" = "0" ] && defuser="${USER}"
31
+NETDATA_USER="$( config_option "run as user" "${defuser}" )"
32
32
-if [ -f $NETDATA_CONFIG_CONF_DIR/netdata.conf ]
33
-then
34
- # find if debug is enabled in the config
35
- df=`grep "debug flags = " $NETDATA_CONFIG_CONF_DIR/netdata.conf | tail -n 1 | cut -d '=' -f 2 | sed s"/ //g"`
36
- if [ -z "$df" -o "$df" = "0x00000000" -o $((df + 1 - 1)) -eq 0 ]
37
- then
38
- NETDATA_CONFIG_DEBUG=0
39
- else
40
- NETDATA_CONFIG_DEBUG=1
41
- fi
33
+# debug flags
34
+defdebug=0
35
+NETDATA_DEBUG="$( config_option "debug flags" ${defdebug} )"
36
43
- # find the user to run as
44
- x="`grep 'run as user = ' $NETDATA_CONFIG_CONF_DIR/netdata.conf | head -n 1 | cut -d '=' -f 2 | sed s"/ //g"`"
45
- test ! -z "$x" && NETDATA_CONFIG_USER="$x"
37
+# port
38
+defport=19999
39
+NETDATA_PORT="$( config_option "port" ${defport} )"
40
47
- x="`grep 'web files directory = ' $NETDATA_CONFIG_CONF_DIR/netdata.conf | head -n 1 | cut -d '=' -f 2 | sed -e s"/^ \+//g" -e s"/ \+$//g"`"
48
- test ! -z "$x" && NETDATA_CONFIG_WEB_DIR="$x"
49
-fi
41
+# directories
42
+NETDATA_CACHE_DIR="$( config_option "database directory" "cache" )"
43
+NETDATA_WEB_DIR="$( config_option "web files directory" "web" )"
44
+NETDATA_LOG_DIR="log"
45
+NETDATA_CONF_DIR="conf.d"
46
51
-for x in "$NETDATA_CONFIG_WEB_DIR" "$NETDATA_CONFIG_CONF_DIR" "$NETDATA_CONFIG_CACHE_DIR" "$NETDATA_CONFIG_LOG_DIR"
52
-do
53
- if [ ! -d $x ]
47
+
48
+# -----------------------------------------------------------------------------
49
+# compile netdata
50
+
51
+echo >&2 "Compiling netdata (debug flags = $NETDATA_DEBUG)..."
52
+if [ $[ NETDATA_DEBUG ] -ne 0 ]
53
then
55
- mkdir $x || exit 1
56
- fi
57
-done
54
+ make install debug=1 || exit 1 # this installs in the current directory
55
59
-echo "Compiling netdata (debug=$NETDATA_CONFIG_DEBUG)"
60
-if [ $NETDATA_CONFIG_DEBUG -eq 1 ]
61
-then
56
+ # let netdata core dump if it crashes
57
ulimit -c unlimited
63
- make install debug=1 || exit 1 # this installs in the current directory
64
- debug_opts="-df 0xfffffadf"
58
+
59
else
60
make install || exit 1 # this installs in the current directory
67
- debug_opts="-df 0x00000000"
61
fi
62
70
-echo "Stopping a (possibly) running netdata..."
63
+
64
+# -----------------------------------------------------------------------------
65
+# prepare the directories
66
+
67
+echo >&2 "Fixing directory permissions for user ${NETDATA_USER}..."
68
+for x in "${NETDATA_WEB_DIR}" "${NETDATA_CONF_DIR}" "${NETDATA_CACHE_DIR}" "${NETDATA_LOG_DIR}"
69
+do
70
+ if [ ! -d "${x}" ]
71
+ then
72
+ mkdir "${x}" || exit 1
73
+ fi
74
+ chown -R "${NETDATA_USER}" "${x}" || echo >&2 "WARNING: Cannot change the ownership of the files in directory ${x} to ${NETDATA_USER}..."
75
+ chmod 0775 "${x}" "${x}" || echo >&2 "WARNING: Cannot change the permissions of the directory ${x} to 0755..."
76
+done
77
+
78
+
79
+# -----------------------------------------------------------------------------
80
+# stop a running netdata
81
+
82
+printf >&2 "Stopping a (possibly) running netdata..."
83
ret=0
84
count=0
85
while [ $ret -eq 0 ]
86
do
75
- if [ $count -gt 10 ]
76
- then
87
+ if [ $count -gt 15 ]
88
+ then
89
echo >&2 "Cannot stop the running netdata."
90
exit 1
91
fi
92
+
93
count=$((count + 1))
94
killall netdata 2>/dev/null
95
ret=$?
83
- test $ret -eq 0 && sleep 1
96
+ test $ret -eq 0 && printf >&2 "." && sleep 2
97
done
98
+echo >&2
99
86
-if [ "$UID" = "0" -a ! -z "$NETDATA_CONFIG_USER" ]
87
-then
88
- for x in "$NETDATA_CONFIG_WEB_DIR" "$NETDATA_CONFIG_CONF_DIR" "$NETDATA_CONFIG_CACHE_DIR" "$NETDATA_CONFIG_LOG_DIR"
89
- do
90
- echo "Changing ownership of web files in $x to $NETDATA_CONFIG_USER"
91
- chown -R "$NETDATA_CONFIG_USER" "$x" || exit 1
92
- chmod 0775 "$x" $NETDATA_CONFIG_CONF_DIR log cache || exit 1
93
- done
94
-fi
100
96
-if [ ! "$UID" = "0" ]
97
-then
98
- echo >&2 "WARNING: NOT RUNNING AS ROOT - CANNOT SWITCH TO USER $NETDATA_CONFIG_USER"
99
- echo >&2 "WARNING: MAKE SURE FILES IN web/ ARE OWNED BY $USER - or it will not work"
101
+# -----------------------------------------------------------------------------
102
+# run netdata
103
+
104
+echo >&2 "Starting netdata..."
105
+`pwd`/netdata "${@}"
106
+
107
+if [ $? -ne 0 ]
108
+ then
109
+ echo >&2
110
+ echo >&2 "SORRY! FAILED TO START NETDATA!"
111
+ exit 1
112
fi
113
102
-echo "Starting netdata..."
103
-if [ -f $NETDATA_CONFIG_CONF_DIR/netdata.conf ]
104
-then
105
- `pwd`/netdata
106
-else
107
- touch $NETDATA_CONFIG_CONF_DIR/netdata.conf
114
109
- if [ "$USER" = "root" ]
115
+# -----------------------------------------------------------------------------
116
+# save a config file, if it is not already there
117
+
118
+if [ ! -f conf.d/netdata.conf ]
119
then
111
- `pwd`/netdata $debug_opts -u $NETDATA_CONFIG_USER -t $NETDATA_CONFIG_INTERNAL_UPDATE_EVERY -l $NETDATA_CONFIG_INTERNAL_HISTORY_LINES -p $NETDATA_CONFIG_PORT || exit 1
120
+ sleep 5
121
+ wget 2>/dev/null -O conf.d/netdata.conf.new "http://localhost:${NETDATA_PORT}/netdata.conf"
122
+ if [ $? -eq 0 -a -s conf.d/netdata.conf.new ]
123
+ then
124
+ mv conf.d/netdata.conf.new conf.d/netdata.conf
125
+ echo >&2 "New configuration saved for you to edit at conf.d/netdata.conf"
126
else
113
- `pwd`/netdata $debug_opts -t $NETDATA_CONFIG_INTERNAL_UPDATE_EVERY -l $NETDATA_CONFIG_INTERNAL_HISTORY_LINES -p $NETDATA_CONFIG_PORT || exit 1
127
+ rm conf.d/netdata.conf.new
128
fi
115
-
116
- sleep 2
117
- wget 2>/dev/null -O $NETDATA_CONFIG_CONF_DIR/netdata.conf.new http://localhost:$NETDATA_CONFIG_PORT/netdata.conf
118
- mv $NETDATA_CONFIG_CONF_DIR/netdata.conf.new $NETDATA_CONFIG_CONF_DIR/netdata.conf
119
-
120
- echo "Hit http://127.0.0.1:$NETDATA_CONFIG_PORT/ from your browser."
121
- echo "You can edit config options in file $NETDATA_CONFIG_CONF_DIR/netdata.conf"
129
fi
130
124
-echo
125
-echo "All Done."
126
-echo
131
+echo >&2
132
+echo >&2 "OK. NetData started! Hit http://localhost:${NETDATA_PORT}/ from your browser."
133
+echo >&2
134
+echo >&2 "Enjoy..."
135
+echo >&2