-
Notifications
You must be signed in to change notification settings - Fork 16
/
miniond
executable file
·68 lines (59 loc) · 1.63 KB
/
miniond
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
#!/bin/bash
#
# This script is similar to minion but will do a few additional things:
# - PHP process is run in the background
# - PHP process is monitored and restarted if it exits for any reason
# - Added handlers for SUGHUP, SIGINT, and SIGTERM
#
# This is meant for long running minion tasks (like background workers).
# Shutting down the minion tasks is done by sending a SIGINT or SIGTERM signal
# to this miniond process. You can also restart the minion task by sending a
# SUGHUP signal to this process. It's useful to restart all your workers when
# deploying new code so that the workers reload their code as well.
# You cannot use this script for tasks that require user input because of the
# PHP process running in the background.
#
# Usage: ./miniond [task:name] [--option1=optval1 --option2=optval2]
#
# And so on.
#
# Define some functions
function start_daemon()
{
echo "Starting"
./minion $ARGS & # This assumes miniond is sitting next to minion
pid=$! # Store pid (globally) for later use..
}
function stop_daemon()
{
kill -TERM $pid
wait $pid # Wait for the task to exit and store the exit code
ecode=$? # Store exit code (globally) for later use..
}
function handle_SIGHUP()
{
echo "Restarting"
stop_daemon
start_daemon
}
function handle_SIGTERM_SIGINT()
{
echo "Shutting Down"
stop_daemon
exit $ecode
}
# Register signal handlers
trap handle_SIGHUP SIGHUP
trap handle_SIGTERM_SIGINT SIGTERM SIGINT
ARGS=$@
start_daemon
while :
do
# Pauses the script until $pid is dead
wait $pid
# Make sure someone didn't start it back up already (SIGHUP handler does this)
if ! kill -0 $pid > /dev/null 2>&1
then
start_daemon
fi
done