Last active
May 27, 2022 16:14
-
-
Save JasonGiedymin/6f26a6c5aa42f852142bca92715b9271 to your computer and use it in GitHub Desktop.
Bash trap a nodejs application - useful for docker
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
set -e | |
sig_handler() { | |
exit_status=$? # Eg 130 for SIGINT, 128 + (2 == SIGINT) | |
if [[ exit_status -gt 0 ]]; then | |
cat <<EOF | |
!!! | |
WARN: signal [$exit_status] recieved by entrypoint ... returning it" | |
!!! | |
EOF | |
else | |
echo "INFO: signal [$exit_status] recieved by entrypoint ... returning it" | |
fi; | |
exit "$exit_status" | |
} | |
trap sig_handler INT HUP TERM QUIT EXIT KILL | |
run() { | |
echo "INFO: entrypoint running app.js with params ..." | |
node ./test.js $@ | |
} | |
run $@ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const SLOW_START_DELAY=500; | |
const WAIT_TIME = 5000; | |
function start(choice) { | |
// simulate "slow start" | |
setTimeout(complete, WAIT_TIME, choice); | |
console.log(`INFO: Running nodejs app with simulated choice ${choice} in ${WAIT_TIME}ms ...`); | |
console.log(`Legend:\n--------------\n 0-10: no error \n 11-50: exception\n 51-75: error obj\n 76-100: self sigkill`) | |
} | |
function complete(choice) { | |
// 0-10 no error | |
// 11-50 exception | |
// 51-75 error obj | |
// 76-100 self sigkill | |
if (choice >= 11 && choice <= 50) { | |
throw "SIMULATED EXCEPTION :-D"; | |
} else if (choice >= 51 && choice <= 75) { | |
throw new Error("SIMULATED ERROR OBJ :-D"); | |
} else if (choice >= 76 && choice <= 100) { | |
process.kill(process.pid, 'SIGKILL'); | |
} else { | |
console.log("INFO: app complete, exiting cleanly."); | |
process.exit(); | |
} | |
} | |
function main() { | |
var args = process.argv.slice(2); | |
if ( args[0] != null ) { | |
setTimeout(start, SLOW_START_DELAY, args[0]) | |
} else { | |
var choice = Math.floor(Math.random() * 100); | |
setTimeout(start, SLOW_START_DELAY, choice); | |
} | |
} | |
main(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment