56 lines
1.2 KiB
Bash
56 lines
1.2 KiB
Bash
|
#!/bin/sh
|
||
|
|
||
|
## Redirecting Filehanders
|
||
|
ln -sf /proc/$$/fd/1 /log/stdout.log
|
||
|
ln -sf /proc/$$/fd/2 /log/stderr.log
|
||
|
|
||
|
## Pre execution handler
|
||
|
pre_execution_handler() {
|
||
|
## Pre Execution
|
||
|
# TODO: put your pre execution steps here
|
||
|
: # delete this nop
|
||
|
}
|
||
|
|
||
|
## Post execution handler
|
||
|
post_execution_handler() {
|
||
|
## Post Execution
|
||
|
# TODO: put your post execution steps here
|
||
|
: # delete this nop
|
||
|
}
|
||
|
|
||
|
## Sigterm Handler
|
||
|
sigterm_handler() {
|
||
|
if [ $pid -ne 0 ]; then
|
||
|
# the above if statement is important because it ensures
|
||
|
# that the application has already started. without it you
|
||
|
# could attempt cleanup steps if the application failed to
|
||
|
# start, causing errors.
|
||
|
kill -15 "$pid"
|
||
|
wait "$pid"
|
||
|
post_execution_handler
|
||
|
fi
|
||
|
exit 143 # 128 + 15 -- SIGTERM
|
||
|
}
|
||
|
|
||
|
## Setup signal trap
|
||
|
# on callback execute the specified handler
|
||
|
trap 'sigterm_handler' SIGTERM
|
||
|
|
||
|
## Initialization
|
||
|
pre_execution_handler
|
||
|
|
||
|
## Start Process
|
||
|
# run process in background and record PID
|
||
|
"$@" >/log/stdout.log 2>/log/stderr.log &
|
||
|
pid="$!"
|
||
|
# Application can log to stdout/stderr, /log/stdout.log or /log/stderr.log
|
||
|
|
||
|
## Wait forever until app dies
|
||
|
wait "$pid"
|
||
|
return_code="$?"
|
||
|
|
||
|
## Cleanup
|
||
|
post_execution_handler
|
||
|
# echo the return code of the application
|
||
|
exit $return_code
|