132 lines
3.3 KiB
Bash
Executable File
132 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Copyright 2017 Mycroft AI Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
SOURCE="${BASH_SOURCE[0]}"
|
|
|
|
script=${0}
|
|
script=${script##*/}
|
|
cd -P "$( dirname "$SOURCE" )"
|
|
|
|
function help() {
|
|
echo "${script}: Mycroft service stopper"
|
|
echo "usage: ${script} [service]"
|
|
echo
|
|
echo "Service:"
|
|
echo " all ends core services: bus, audio, skills, voice"
|
|
echo " (none) same as \"all\""
|
|
echo " bus stop the Mycroft messagebus service"
|
|
echo " audio stop the audio playback service"
|
|
echo " skills stop the skill service"
|
|
echo " voice stop voice capture service"
|
|
echo " enclosure stop mark_1 enclosure service"
|
|
echo
|
|
echo "Examples:"
|
|
echo " ${script}"
|
|
echo " ${script} audio"
|
|
|
|
exit 0
|
|
}
|
|
|
|
function process-running() {
|
|
if [[ $( pgrep -f "python3 -m mycroft.*${1}" ) ]] ; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
function end-process() {
|
|
if process-running $1 ; then
|
|
echo -n "Stopping $1..."
|
|
pid=$( pgrep -f "python3 -m mycroft.*${1}" )
|
|
kill -SIGINT ${pid}
|
|
|
|
# Wait up to 5 seconds (50 * 0.1) for process to stop
|
|
c=1
|
|
while [ $c -le 50 ] ; do
|
|
if process-running $1 ; then
|
|
sleep 0.1
|
|
(( c++ ))
|
|
else
|
|
c=999 # end loop
|
|
fi
|
|
done
|
|
|
|
if process-running $1 ; then
|
|
echo "failed to stop."
|
|
echo -n " Killing $1..."
|
|
kill -9 ${pid}
|
|
echo "killed."
|
|
result=120
|
|
else
|
|
echo "stopped."
|
|
if [ $result -eq 0 ] ; then
|
|
result=100
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
result=0 # default, no change
|
|
|
|
OPT=$1
|
|
shift
|
|
|
|
case ${OPT} in
|
|
"all")
|
|
;&
|
|
"")
|
|
echo "Stopping all mycroft-core services"
|
|
end-process messagebus.service
|
|
end-process skills
|
|
end-process audio
|
|
end-process speech
|
|
|
|
# determine platform type
|
|
if [[ -r /etc/mycroft/mycroft.conf ]] ; then
|
|
mycroft_platform=$( jq -r ".enclosure.platform" < /etc/mycroft/mycroft.conf )
|
|
if [[ $mycroft_platform == "mycroft_mark_1" ]] ; then
|
|
# running on a Mark 1, stop enclosure service
|
|
end-process enclosure
|
|
fi
|
|
fi
|
|
;;
|
|
"bus")
|
|
end-process messagebus.service
|
|
;;
|
|
"audio")
|
|
end-process audio
|
|
;;
|
|
"skills")
|
|
end-process skills
|
|
;;
|
|
"voice")
|
|
end-process speech
|
|
;;
|
|
"enclosure")
|
|
end-process enclosure
|
|
;;
|
|
*)
|
|
help
|
|
;;
|
|
esac
|
|
|
|
# Exit codes:
|
|
# 0 if nothing changed (e.g. --help or no process was running)
|
|
# 100 at least one process was stopped
|
|
# 120 if any process had to be killed
|
|
exit $result
|