forked from ricbra/rabbitmq-cli-consumer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild_service_deb.sh
executable file
·153 lines (139 loc) · 3.67 KB
/
build_service_deb.sh
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
143
144
145
146
147
148
149
150
151
152
153
#!/bin/bash
set -e
main () {
read_input
source ~/.rabbitmq-cli-consumer
prepare_deb_dirs
generate_config "$service_name" "$queue_name"
generate_init "$service_name" "$cmd"
build_package "$service_name"
clean_deb_dirs
}
read_input () {
service_name="rabbitmq-cli-consumer"
cmd="/var/www/app/console -v acme:cmd"
queue_name="job_queue"
if [ -f ~/.rabbitmq-cli-consumer ]; then
source ~/.rabbitmq-cli-consumer
fi
read -e -p "Name of service: " -i "$service_name" service_name
read -e -p "Command to process queue item: " -i "$cmd" cmd
read -e -p "Queue name: " -i "$queue_name" queue_name
cat << EOF > ~/.rabbitmq-cli-consumer
service_name="$service_name"
cmd="$cmd"
queue_name="$queue_name"
EOF
}
prepare_deb_dirs () {
clean_deb_dirs
mkdir -p /tmp/deb/etc/init.d
mkdir -p /tmp/deb/usr/bin
}
generate_config () {
service_name=$1
queue_name=$2
cat <<EOF > /tmp/deb/etc/$service_name.conf
[rabbitmq]
host = localhost
username = guest
password = guest
queue=$queue_name
[logs]
error = /var/log/$service_name.log
info = /var/log/$service_name.log
EOF
}
generate_init () {
service_name=$1
cmd=$2
cat <<EOF > /tmp/deb/etc/init.d/$service_name
#! /bin/sh
### BEGIN INIT INFO
# Provides: $service_name
# Required-Start: networking
# Required-Stop: networking
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: RabbitMQ CLI Consumer $service_name
# Description: Consumes queues from rabbitmq and executes
# command line scripts with message as
# argument.
### END INIT INFO
# Using the lsb functions to perform the operations.
. /lib/lsb/init-functions
NAME=$service_name
DAEMON=/usr/bin/\$NAME
PIDFILE=/var/run/\$NAME.pid
CONFIG=/etc/$service_name.conf
CMD='$cmd'
# If the daemon is not there, then exit.
test -x \$DAEMON || exit 5
case \$1 in
start)
if [ -e \$PIDFILE ]; then
status_of_proc -p \$PIDFILE \$DAEMON "\$NAME process" && status="0" || status="\$?"
if [ \$status = "0" ]; then
exit # Exit
fi
fi
log_daemon_msg "Starting the process" "\$NAME"
if start-stop-daemon --start --quiet --oknodo --background --pidfile \$PIDFILE --make-pidfile \\
--exec \$DAEMON -- --configuration \$CONFIG -V --executable "\$CMD"
then
log_end_msg 0
else
log_end_msg 1
fi
;;
stop)
log_daemon_msg "Stopping \$NAME"
start-stop-daemon --stop --quiet --oknodo --pidfile \$PIDFILE
case "\$?" in
0) log_end_msg 0
if [ -e \$PIDFILE ]; then
rm \$PIDFILE
fi ;;
1) log_progress_msg "already stopped"
log_end_msg 0 ;;
*) log_end_msg 1 ;;
esac
;;
restart)
# Restart the daemon.
\$0 stop && sleep 2 && \$0 start
;;
status)
# Check the status of the process.
if [ -e \$PIDFILE ]; then
status_of_proc -p \$PIDFILE \$DAEMON "\$NAME process" && exit 0 || exit \$?
else
log_daemon_msg "\$NAME process is not running"
log_end_msg 0
fi
;;
*)
# For invalid arguments, print the usage message.
echo "Usage: \$0 {start|stop|restart|status}"
exit 2
;;
esac
EOF
chmod +x /tmp/deb/etc/init.d/$service_name
}
build_package () {
service_name=$1
if [ ! -d ~/gocode ]; then
mkdir ~/gocode
fi
export GOPATH=~/gocode
go get github.com/ricbra/rabbitmq-cli-consumer
go build github.com/ricbra/rabbitmq-cli-consumer
mv rabbitmq-cli-consumer /tmp/deb/usr/bin/$service_name
VERSION=`/tmp/deb/usr/bin/$service_name --version|awk '{print $3}'`
fpm -s dir -t deb -C /tmp/deb --force --name $service_name --version $VERSION --description "Consumes RabbitMQ messages into cli program" --config-files etc/$service_name.conf
}
clean_deb_dirs () {
rm -rf /tmp/deb
}
main