summaryrefslogtreecommitdiff
path: root/src/appMain/daemon.sh
blob: fbde0d750a7ee3f859b025f195f5a45d2750ea7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/bin/bash
cd $(dirname $0)
COMMAND=$1
EXTERNAL_POLICIES=$2
DIR=$(pwd)

CORE_PID_FILE=${DIR}/core.pid
CORE_APPLICATION_NAME=smartDeviceLinkCore
PM_PID_FILE=${DIR}/policy_manager.pid
PM_APPLICATION_NAME=sample_policy_manager.py

function core_start() {
  if [ -f "$CORE_PID_FILE" ] && [ -n "$(ps -p $(cat $CORE_PID_FILE) -o pid=)" ]; then
    echo "Core is already running"
    return 1
  elif [ -n "$(pgrep -f $CORE_APPLICATION_NAME)" ]; then
    echo "Core is already running outside of this script"
    echo "All instances of Core can be stopped using the \"kill\" command"
    return 2
  else
    echo "Starting SmartDeviceLink Core"
    LD_LIBRARY_PATH=$DIR ${DIR}/${CORE_APPLICATION_NAME} &
    CORE_PID=$!
    echo $CORE_PID > $CORE_PID_FILE
    return 0
  fi
}

function core_stop() {
  RESULT=1
  if [ -f "$CORE_PID_FILE" ] && [ -n "$(ps -p $(cat $CORE_PID_FILE) -o pid=)" ]; then
    echo "Stopping SmartDeviceLink Core"
    CORE_PID=$(cat $CORE_PID_FILE)
    kill $CORE_PID

    # If Core doesn't close normally within 10 seconds, force-close it
    timeout 10s tail --pid=$CORE_PID -f /dev/null
    if [ -n "$(ps -p $CORE_PID -o pid=)" ]; then
      echo "Core did not shut down properly, force-killing"
      kill -9 $CORE_PID
    fi
    RESULT=0
  fi

  if [ -f "$CORE_PID_FILE" ]; then
    rm $CORE_PID_FILE
  fi 
  return $RESULT
}

function pm_install_dependencies() {
  pip3 list | grep -F tornado > /dev/null
  if [ $? -eq 1 ]; then
    echo "Installing tornado python package"
    sudo -H pip3 install tornado
  fi
}

function pm_start() {
  if [ -f "$PM_PID_FILE" ] && [ -n "$(ps -p $(cat $PM_PID_FILE) -o pid=)" ]; then
    echo "Policy Server is already running"
    return 1
  elif [ -n "$(pgrep -f $PM_APPLICATION_NAME)" ]; then
    echo "Policy Server is already running outside of this script"
    echo "All instances of Core can be stopped using the \"kill\" command"
    return 2
  else
    pm_install_dependencies
    echo "Starting Policy Manager"
    python3 ${DIR}/${PM_APPLICATION_NAME} --pack_port 8088 --unpack_port 8089 --add_http_header --encryption &
    PM_PID=$!
    echo $PM_PID > $PM_PID_FILE
    return 0
  fi
}

function pm_stop() {
  RESULT=1
  if [ -f "$PM_PID_FILE" ] && [ -n "$(ps -p $(cat $PM_PID_FILE) -o pid=)" ]; then
    echo "Stopping Policy Manager"
    kill -INT $(cat $PM_PID_FILE)
    kill -9 $(cat $PM_PID_FILE)
    RESULT=0
  fi
  
  # Clear PID regardless of whether the process was running or not
  if [ -f "$PM_PID_FILE" ]; then
    rm $PM_PID_FILE
  fi
  return $RESULT
}

if [ "$COMMAND" == "stop" ]; then
  core_stop
  if [ "$?" -ne 0 ]; then
    echo "Core is not running (or was started outside of this script)"
  fi

  if [ "$EXTERNAL_POLICIES" == "true" ]; then
    pm_stop
    if [ "$?" -ne 0 ]; then
      echo "Policy Server is not running (or was started outside of this script)"
    fi
  fi
elif [ "$COMMAND" == "restart" ]; then
  core_stop
  if [ "$?" -eq 0 ]; then
    core_start
  else
    echo "Core is not running (or was started outside of this script)"
  fi

  if [ "$EXTERNAL_POLICIES" == "true" ]; then
    pm_stop
    if [ "$?" -eq 0 ]; then
      pm_start
    else
      echo "Policy Server is not running (or was started outside of this script)"
    fi
  fi
elif [ "$COMMAND" == "start" ]; then
  core_start
  if [ "$EXTERNAL_POLICIES" == "true" ]; then
    pm_start
  fi
elif [ "$COMMAND" == "kill" ]; then
  core_stop
  pkill -9 -f $CORE_APPLICATION_NAME
  if [ "$?" -eq 0 ]; then
    echo "Killed all lingering instances of SDL Core"
  fi

  if [ "$EXTERNAL_POLICIES" == "true" ]; then
    pm_stop
    pkill -9 -f $PM_APPLICATION_NAME
    if [ "$?" -eq 0 ]; then
      echo "Killed all lingering instances of the Policy Server"
    fi
  fi
else
  echo "usage: daemon.sh [start/restart/stop/kill] [use_sample_policy_manager?]"
fi