Use dynamic "root"/prefix
[gitorious:gitorious-daemons.git] / usr / sbin / gitoriousd
1 #!/bin/sh
2 #   Copyright (C) 2013 Gitorious AS
3 #
4 #   This program is free software: you can redistribute it and/or modify
5 #   it under the terms of the GNU Affero General Public License as published by
6 #   the Free Software Foundation, either version 3 of the License, or
7 #   (at your option) any later version.
8 #
9 #   This program is distributed in the hope that it will be useful,
10 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
11 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 #   GNU Affero General Public License for more details.
13 #
14 #   You should have received a copy of the GNU Affero General Public License
15 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 progname="gitoriousd"
17
18 # Read /etc/gitorious.conf, expose env vars
19 current_dir=$(dirname $0)
20 gitorious_conf=$current_dir/../../etc/gitorious.conf
21 prefix=$current_dir/../..
22 # Look for $PREFIX/gitorious.conf, source if present
23 if [ -f $gitorious_conf ]; then
24     . $gitorious_conf
25     export GITORIOUS_HOME
26 else
27     echo "gitorious.conf not found, exiting"
28     exit 1
29 fi
30
31 start(){
32     for app in $(find "$prefix/usr/libexec/$progname" -type f -not -name "*.rb" -executable)
33     do
34         local name=$(basename $app)
35         _checkpid $name && _status_down "Not starting $name" || (_status_ok "Starting $name" && $app)
36     done
37 }
38
39 _checkpid() {
40     local name=$1
41     local pidfile="$prefix/var/run/$progname/$name.pid"
42     if [ -f $pidfile ]; then
43         pid=$(cat $pidfile 2>/dev/null)
44         ps -p $pid >/dev/null 2>&1
45         exitstatus=$?
46         if [ $exitstatus -eq 0 ]; then
47             return 0
48         else
49             return 1
50         fi
51     else
52         return 1
53     fi
54 }
55
56 status(){
57     for path in $(find "$prefix/usr/libexec/$progname" -not -name "*.rb" -type f -executable)
58     do
59         local name=$(basename $path)
60         _checkpid $name && _status_ok "$name" || _status_down "$name"
61     done
62 }
63
64 _status_ok() {
65     printf "%-50s \033[1;32m %s \033[0m\n" "$1" [UP]
66 }
67
68 _status_down() {
69     printf "%-50s \033[1;31m %s \033[0m\n" "$1" [DOWN]
70 }
71
72 _signal_all(){
73     local signal=$1
74     for app in $(find "$prefix/usr/libexec/$progname" -type f -not -name "*.rb" -executable)
75     do
76         local name=$(basename $app)
77         local pidfile="$prefix/var/run/$progname/$name.pid"
78         if [ -f $pidfile ]; then
79             local pid=$(cat $pidfile 2>/dev/null)
80             if [ "$signal" == "QUIT" ]; then
81                 _status_ok "Stopping $name"
82             else
83                 /bin/echo "Sending $signal to $pid for process $name"
84             fi
85             kill -$signal $pid 2>/dev/null
86         fi
87     done
88 }
89
90 stop(){
91     _signal_all "QUIT"
92 }
93
94 reload(){
95     _signal_all "HUP"
96 }
97
98 restart(){
99     /bin/echo "Restart implemented reliably, using reload instead"
100     reload
101 }
102
103 case "$1" in
104     start)
105         start
106         ;;
107     stop)
108         stop
109         ;;
110     status)
111         status
112         ;;
113     restart)
114         restart
115         ;;
116     reload)
117         reload
118         ;;
119     *)
120         /bin/echo "Usage: $0 {start,stop,restart,status}"
121 esac