File: //etc/rc0.d/K01bcm-agent
#!/bin/bash
#
# Init file for Baidu cloud monitor agent
#
### BEGIN INIT INFO
# Provides: bcm-agent
# Required-Start: $local_fs $syslog
# Required-Stop: $local_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Baidu cloud monitor agent
# Description: Baidu cloud monitor(BCM) agent which collect system metrics.
### END INIT INFO
export PATH='/usr/sbin:/usr/bin:/sbin:/bin'
help() {
echo "${0} <start|stop|restart|status>"
exit 1
}
die() {
echo "[FAILED] $@"
exit 1
}
ok() {
echo "[OK] $@"
}
run() {
# 100M
ulimit -m 100000
ulimit -c 0
nice_prefix=""
type nice >/dev/null && nice_prefix="nice -n 19 "
core_num="$(cat /proc/cpuinfo | grep processor | wc -l)"
last_core="$((${core_num} - 1))"
taskset_prefix=""
type taskset >/dev/null
[ $? -eq 0 -a $core_num -gt 1 ] && taskset_prefix="taskset -c 1-$last_core "
(eval "$nice_prefix $taskset_prefix $@" >/dev/null </dev/null 2>&1 &)
}
signal() {
pgrep -u 0 '^bcm-agent.upgra$' | xargs kill -9
pgrep -u 0 '^bcm-.i$' | xargs kill -9 1>/dev/null 2>&1
return $?
}
check() {
pgrep -u 0 '^bcm-agent.upgra$' >/dev/null
return $?
}
start() {
[ -x '/opt/avalokita/bin/avalokita' ] || {
die 'Please install avalokita first.'
}
[ -d '/opt/bcm-agent/var/lib/bcm-agent' ] || {
die 'Please reinstall bcm-agent.'
}
[ -x '/opt/bcm-agent/var/lib/bcm-agent/bcm-agent.upgrader' ] || {
ln -sf /opt/avalokita/bin/avalokita /opt/bcm-agent/var/lib/bcm-agent/bcm-agent.upgrader
}
check
if [ $? -eq 0 ]; then
ok 'Running'
return 0
fi
cd /opt/bcm-agent/var/lib/bcm-agent/
run "/opt/bcm-agent/var/lib/bcm-agent/bcm-agent.upgrader \
--update-url=http://download.bcm.baidubce.com/packages/collectd-bcm-v2-$(uname -m).sh \
--signature-url=http://download.bcm.baidubce.com/packages/collectd-bcm-v2-$(uname -m).sh.sig \
--certificate='/opt/bcm-agent/var/lib/bcm-agent/cert.pem' \
--max-executable-size=31457280 \
/opt/bcm-agent/var/lib/bcm-agent/collectd-bcm-v2-$(uname -m).sh"
sleep 1
check || die 'start'
ok 'start'
return 0
}
stop() {
check
if [ $? -ne 0 ]; then
ok 'Not running'
return 0
fi
for i in 1 2 3 4 5 6 7 8; do
signal
sleep $i
check
if [ $? -ne 0 ]; then
ok 'stop'
return 0
fi
done
die 'stop'
}
restart() {
stop
start
return 0
}
status() {
check
if [ $? -eq 0 ]; then
echo 'Running'
return 0
else
echo 'Not running'
return 1
fi
}
[ "$(id -u)" = 0 ] || {
die Please run with root.
}
case "${1}" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
*)
help
;;
esac