Fix running service checks.
[carnet-upgrade.git] / src / scripts / check_services
1 #!/bin/bash
2
3 STORE=/var/lib/carnet-upgrade/check-services
4
5 # Load nase funkcije
6 . /usr/share/carnet-upgrade/data.sh
7 . /usr/share/carnet-upgrade/messages.sh
8 . /usr/share/carnet-upgrade/functions.sh
9
10 # provjeri da li su paketi iz prvog polja instalirani i to strpaj u debconf
11 cs_preupgrade () {
12   local services i
13
14   for i in $(echo "$services_to_check" | sed 's/                */      /g'| awk -F'    ' '{print $1}')
15   do
16     if pkg $i; then
17       if ! echo $services | grep -q $i; then
18         services="$services $i"
19       fi
20     fi
21   done
22   services=${services# }
23
24   if [ -n "$services" ]; then
25     echo "$services" > $STORE
26   fi
27 }
28
29 cs_pgrep () {
30     local failed_services
31
32     while read line; do
33         # get service param from stdin
34         user=$(echo "$line" | awk -F '  ' '{print $2}')
35         psname=$(echo "$line" | awk -F '        ' '{print $3}')
36         nicename=$(echo "$line" | awk -F '      ' '{print $4}')
37
38         # check if service is running
39         if ! pgrep -u $user -f "$psname" > /dev/null; then
40             failed_services="$failed_services, $nicename"
41
42         fi
43     done
44
45     echo ${failed_services#, }
46 }
47
48 # uzmi iz debconfa instalirane servise, i provjeri rade li
49 cs_postupgrade () {
50   local services i failed_services msg_header
51
52   case "$queuename" in
53     upgrade) msg_header="$msg_finished_upgrade"
54       ;;
55     *)
56       msg_header="$msg_finished"
57       ;;
58   esac
59
60   services=$(test -f $STORE && cat $STORE)
61   services="${services// /|}"
62
63   failed_services=$(
64     echo "$services_to_check" \
65     | grep -E "^($services)" \
66     | sed 's/           */      /g' \
67     | cs_pgrep
68   )
69
70   if [ -n "$failed_services" ]; then
71     notice "$msg_header$msg_failed_services$failed_services"
72   else
73     notice "$msg_header"
74   fi
75 }
76
77 # checkiraj da li je sto zapisano
78 cs_check () {
79   services=$(test -f $STORE && cat $STORE)
80
81   if [ -n "$services" ]; then
82     exit 0
83   else
84     exit 1
85   fi
86 }
87
88 # prikazi sto je zapisano
89 cs_show () {
90   services=$(test -f $STORE && cat $STORE)
91
92   echo "$services"
93 }
94
95 case "$1" in
96 preupgrade)     cs_preupgrade
97         ;;
98 postupgrade)    cs_postupgrade
99         ;;
100 check)  cs_check
101         ;;
102 show)   cs_show
103         ;;
104 *)      echo "Usage: $0 (preupgrade|postupgrade|check|show)"
105         exit 1 
106         ;;
107 esac
108 exit 0
109