āĻŦā§āĻ¯āĻžāĻļ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻā§āĻ˛āĻŋ āĻĄāĻŋāĻŦāĻžāĻ āĻāĻ°āĻž āĻāĻāĻāĻŋ āĻāĻĄāĻŧā§āĻ° āĻāĻžāĻĻāĻžāĻ¯āĻŧ āĻ¸ā§āĻ āĻā§āĻāĻāĻžāĻ° āĻŽāĻ¤ā§, āĻŦāĻŋāĻļā§āĻˇāĻ¤ āĻ¯āĻāĻ¨ āĻāĻžāĻ āĻžāĻŽā§, āĻ˛āĻāĻŋāĻ āĻāĻŦāĻ āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¯ā§āĻā§āĻ¯āĻ¤āĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻā§āĻ˛āĻŋ āĻ¸āĻŽāĻ¯āĻŧāĻŽāĻ¤ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻ¨āĻž āĻāĻ°ā§āĻ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻā§āĻĄāĻŦā§āĻ¸ā§ āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻāĻ¯ā§āĻāĻ¨ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻāĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻā§āĻ° āĻā§āĻ˛ā§āĻ° āĻāĻžāĻ°āĻŖā§ āĻŦāĻž āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻāĻāĻŋāĻ˛ āĻ¸ā§āĻ¤ā§āĻĒ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻĒāĻ¨āĻŋ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ¤ā§ āĻ¨āĻŋāĻā§āĻā§ āĻā§āĻāĻā§ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻā§āĻŽ
āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§, āĻ˛ā§āĻāĻ āĻāĻ¤ āĻāĻ¯āĻŧā§āĻ āĻŦāĻāĻ°ā§ āĻ¤āĻŋāĻ¨āĻŋ āĻ¯āĻž āĻļāĻŋāĻā§āĻā§āĻ¨ āĻ¤āĻž āĻļā§āĻ¯āĻŧāĻžāĻ° āĻāĻ°ā§āĻā§āĻ¨, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ āĻāĻŋāĻā§ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻā§āĻ˛ āĻ¯āĻž āĻ¤āĻžāĻā§ āĻ°āĻā§āĻˇāĻž āĻāĻ°ā§āĻā§āĨ¤ āĻāĻāĻŋ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻāĻžāĻ°āĻŖ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ¸āĻĢā§āĻāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§, āĻ¤āĻžāĻĻā§āĻ° āĻāĻ°ā§āĻŽāĻā§āĻŦāĻ¨ā§āĻ° āĻā§āĻ¨ āĻ¨āĻž āĻā§āĻ¨ āĻ¸āĻŽāĻ¯āĻŧā§, āĻ°ā§āĻāĻŋāĻ¨ āĻāĻžāĻā§āĻ° āĻāĻžāĻāĻā§āĻ˛āĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°āĻ¤ā§ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°ā§āĨ¤
āĻĢāĻžāĻāĻĻ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ°
āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻļāĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤ āĻāĻŋāĻā§ āĻāĻāĻ˛ā§ āĻāĻŽāĻŋ āĻ¯ā§ āĻŦā§āĻļāĻŋāĻ°āĻāĻžāĻ āĻŦā§āĻ¯āĻžāĻļ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻ¸āĻŽā§āĻŽā§āĻā§āĻ¨ āĻšāĻ¯āĻŧā§āĻāĻŋ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻāĻāĻ¨āĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻā§āĻ˛āĻŋāĻ¨āĻāĻĒ āĻŽā§āĻāĻžāĻ¨āĻŋāĻāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¨āĻžāĨ¤
āĻŦāĻžāĻāĻ°ā§ āĻĨā§āĻā§ āĻŦāĻŋāĻ¸ā§āĻŽāĻ¯āĻŧ āĻāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¯ā§āĻŽāĻ¨ āĻā§āĻ° āĻĨā§āĻā§ āĻ¸āĻāĻā§āĻ¤ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĨ¤ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻā§āĻ˛āĻŋ āĻĒā§āĻ°ā§āĻĄāĻžāĻāĻļāĻ¨ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¯āĻĨā§āĻˇā§āĻ āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¯ā§āĻā§āĻ¯ āĻ¤āĻž āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ āĻāĻžāĻ¤ā§āĻ¯āĻŧ āĻā§āĻ¸āĻā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻž āĻ āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖāĨ¤ āĻāĻŽāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ¤ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻžāĻ¨āĻžāĻ¤ā§ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ:
function handle_exit() {
// Add cleanup code here
// for eg. rm -f "/tmp/${lock_file}.lock"
// exit with an appropriate status code
}
// trap <HANDLER_FXN> <LIST OF SIGNALS TO TRAP>
trap handle_exit 0 SIGHUP SIGINT SIGQUIT SIGABRT SIGTERM
trap
āĻāĻāĻāĻŋ āĻļā§āĻ˛ āĻŦāĻŋāĻ˛ā§āĻ-āĻāĻ¨ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻŋāĻ¨āĻāĻĒ āĻĢāĻžāĻāĻļāĻ¨ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻāĻ°āĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°ā§ āĻ¯āĻž āĻā§āĻ¨ā§ āĻ¸āĻāĻā§āĻ¤ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻ¯ā§āĻŽāĻ¨ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ° āĻ¸āĻā§āĻā§ āĻŦāĻŋāĻļā§āĻˇ āĻ¯āĻ¤ā§āĻ¨ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻāĻāĻŋāĻ¤ SIGINT
, āĻ¯āĻž āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻāĻŋ āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻāĻ°ā§ āĻĻā§āĻ¯āĻŧāĨ¤
āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻ
āĻ§āĻŋāĻāĻžāĻāĻļ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻĒāĻ¨āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ§āĻ°āĻž āĻāĻāĻŋāĻ¤ EXIT
, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ§āĻžāĻ°āĻŖāĻž āĻšāĻ˛ āĻāĻĒāĻ¨āĻŋ āĻāĻ¸āĻ˛ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒā§āĻĨāĻ āĻ¸āĻāĻā§āĻ¤ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻāĻāĻ°āĻŖ āĻāĻžāĻ¸ā§āĻāĻŽāĻžāĻāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻ¸ā§āĻ āĻĢāĻžāĻāĻļāĻ¨ - āĻ¤ā§āĻ°ā§āĻāĻŋ āĻĻā§āĻ°ā§āĻ¤ āĻ¸āĻŽāĻžāĻĒā§āĻ¤āĻŋ
āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻĨā§ āĻ¤āĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻžāĻ¨āĻžāĻ¨ā§ āĻāĻŦāĻ āĻĻā§āĻ°ā§āĻ¤ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻŦāĻ¨ā§āĻ§ āĻāĻ°āĻž āĻā§āĻŦāĻ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖā§ˇ āĻāĻāĻ°āĻāĻŽ āĻāĻāĻāĻŋ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻāĻžāĻ˛āĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻžāĻ° āĻā§āĻ¯āĻŧā§ āĻāĻžāĻ°āĻžāĻĒ āĻāĻ° āĻāĻŋāĻā§āĻ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¨āĻž:
rm -rf ${directory_name}/*
āĻĻāĻ¯āĻŧāĻž āĻāĻ°ā§ āĻ¨ā§āĻ āĻāĻ°ā§āĻ¨ āĻ¯ā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ directory_name
āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻ¨āĻž.
āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻŦāĻŋāĻ˛ā§āĻ-āĻāĻ¨ āĻĢāĻžāĻāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ set
, āĻ¯ā§āĻŽāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ set -o errexit
, set -o pipefail
āĻŦāĻž set -o nounset
āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻļā§āĻ°ā§āĻ¤ā§āĨ¤ āĻāĻ āĻĢāĻžāĻāĻļāĻ¨āĻā§āĻ˛āĻŋ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°ā§ āĻ¯ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻāĻŋ āĻ¯ā§ āĻā§āĻ¨āĻ āĻ¨āĻ¨-āĻāĻŋāĻ°ā§ āĻāĻā§āĻ¸āĻŋāĻ āĻā§āĻĄā§āĻ° āĻŽā§āĻā§āĻŽā§āĻāĻŋ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻĨā§āĻ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻāĻ°āĻŦā§, āĻ
āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°, āĻāĻāĻāĻŋ āĻĒāĻžāĻāĻĒā§āĻ° āĻāĻĒāĻ° āĻĻāĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻž āĻ
āĻŦā§āĻ§ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻāĻŦāĻ āĻāĻ°āĻ āĻ
āĻ¨ā§āĻ āĻāĻŋāĻā§:
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
function print_var() {
echo "${var_value}"
}
print_var
$ ./sample.sh
./sample.sh: line 8: var_value: unbound variable
āĻĻā§āĻ°āĻˇā§āĻāĻŦā§āĻ¯: āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĢāĻžāĻāĻļāĻ¨ āĻ¯ā§āĻŽāĻ¨ set -o errexit
, āĻāĻāĻāĻŋ "āĻāĻžāĻāĻāĻž" āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻā§āĻĄ (āĻļā§āĻ¨ā§āĻ¯ āĻāĻžāĻĄāĻŧāĻž) āĻĨāĻžāĻāĻ˛ā§āĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻĨā§āĻā§ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻāĻ°āĻŦā§āĨ¤ āĻ¤āĻžāĻ āĻāĻžāĻ¸ā§āĻāĻŽ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻŋāĻ āĻĒā§āĻ°āĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻž āĻāĻžāĻ˛, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ:
#!/bin/bash
error_exit() {
line=$1
shift 1
echo "ERROR: non zero return code from line: $line -- $@"
exit 1
}
a=0
let a++ || error_exit "$LINENO" "let operation returned non 0 code"
echo "you will never see me"
# run it, now we have useful debugging output
$ bash foo.sh
ERROR: non zero return code from line: 9 -- let operation returned non 0 code
āĻāĻāĻāĻžāĻŦā§ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ˛ā§āĻāĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻāĻāĻ°āĻŖ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻ¸āĻ¤āĻ°ā§āĻ āĻšāĻ¤ā§ āĻŦāĻžāĻ§ā§āĻ¯ āĻāĻ°ā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻ āĻŦāĻžāĻ āĻāĻ°ā§ āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻāĻā§ āĻāĻāĻāĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻ¸āĻŽā§āĻāĻžāĻŦāĻ¨āĻžāĻ° āĻĒā§āĻ°ā§āĻŦāĻžāĻāĻžāĻ¸ āĻĻā§āĻ¯āĻŧāĨ¤
āĻŦāĻŋāĻāĻžāĻļā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¸āĻ¨āĻžāĻā§āĻ¤ āĻāĻ°āĻ¤ā§ ShellCheck
āĻāĻāĻž āĻŽāĻ¤ āĻāĻŋāĻā§ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻŽā§āĻ˛ā§āĻ¯
āĻāĻŽāĻŋ āĻāĻŽāĻžāĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻāĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻĒāĻ°āĻŋāĻŦā§āĻļā§ āĻ¸āĻŋāĻ¨āĻā§āĻ¯āĻžāĻā§āĻ¸, āĻļāĻŦā§āĻĻāĻžāĻ°ā§āĻĨāĻŦāĻŋāĻĻā§āĻ¯āĻž āĻāĻŦāĻ āĻā§āĻĄā§āĻ° āĻāĻŋāĻā§ āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻĒā§āĻ¤ā§ āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ āĻ¯āĻž āĻāĻŽāĻŋ āĻŦāĻŋāĻāĻžāĻļ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŽāĻŋāĻ¸ āĻāĻ°ā§āĻāĻŋāĨ¤ āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻžāĻļ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻā§āĻ˛ āĻāĻŦāĻ āĻāĻŽāĻŋ āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°āĻāĻŋāĨ¤
āĻāĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§
POSIX-āĻ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻā§āĻĄāĻā§āĻ˛āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻļā§āĻ¨ā§āĻ¯ āĻŦāĻž āĻāĻ āĻ¨āĻ¯āĻŧ, āĻļā§āĻ¨ā§āĻ¯ āĻŦāĻž āĻāĻāĻāĻŋ āĻ -āĻļā§āĻ¨ā§āĻ¯ āĻŽāĻžāĻ¨āĨ¤ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻžāĻ¸ā§āĻāĻŽ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻā§āĻĄ (201-254 āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§) āĻĢā§āĻ°āĻ¤ āĻĻāĻŋāĻ¤ā§ āĻāĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨āĨ¤
āĻāĻ āĻ¤āĻĨā§āĻ¯āĻāĻŋ āĻ¤āĻāĻ¨ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¯ā§āĻā§āĻ˛āĻŋ āĻ āĻŋāĻ āĻā§ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¤ā§āĻ°ā§āĻāĻŋ āĻāĻā§āĻā§ āĻ¤āĻž āĻŦā§āĻāĻ¤ā§ āĻāĻŦāĻ āĻ¸ā§āĻ āĻ āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻžāĻ¨āĻžāĻ¤ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ°âā§āĻ¯āĻžāĻĒ āĻāĻ°ā§:
#!/usr/bin/env bash
SUCCESS=0
FILE_NOT_FOUND=240
DOWNLOAD_FAILED=241
function read_file() {
if ${file_not_found}; then
return ${FILE_NOT_FOUND}
fi
}
āĻĻā§āĻ°āĻˇā§āĻāĻŦā§āĻ¯: āĻā§āĻ˛āĻŦāĻļāĻ¤ āĻāĻ¨āĻāĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§āĻ¨ā§āĻ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻā§ āĻāĻāĻžāĻ°āĻ°āĻžāĻāĻĄāĻŋāĻ āĻāĻĄāĻŧāĻžāĻ¤ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ āĻ¨āĻžāĻŽāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻŦāĻŋāĻļā§āĻˇāĻāĻžāĻŦā§ āĻ¸āĻ¤āĻ°ā§āĻ āĻĨāĻžāĻā§āĻ¨āĨ¤
āĻ˛āĻāĻŋāĻ āĻĢāĻžāĻāĻļāĻ¨
āĻāĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛āĻā§āĻ˛āĻŋ āĻ¸āĻšāĻā§ āĻŦā§āĻāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸ā§āĻ¨ā§āĻĻāĻ° āĻāĻŦāĻ āĻāĻžāĻ āĻžāĻŽā§āĻŦāĻĻā§āĻ§ āĻ˛āĻāĻŋāĻ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖāĨ¤ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻāĻā§āĻ-āĻ¸ā§āĻ¤āĻ°ā§āĻ° āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻāĻžāĻˇāĻžāĻ° āĻŽāĻ¤ā§, āĻāĻŽāĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻāĻŽāĻžāĻ° āĻŦā§āĻ¯āĻžāĻļ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¨ā§āĻāĻŋāĻ āĻ˛āĻāĻŋāĻ āĻĢāĻžāĻāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ, āĻ¯ā§āĻŽāĻ¨ __msg_info
, __msg_error
āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋāĨ¤
āĻāĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻāĻžāĻ¯āĻŧāĻāĻžāĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻŽāĻŋāĻ¤ āĻ˛āĻāĻŋāĻ āĻāĻžāĻ āĻžāĻŽā§ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°ā§:
#!/usr/bin/env bash
function __msg_error() {
[[ "${ERROR}" == "1" ]] && echo -e "[ERROR]: $*"
}
function __msg_debug() {
[[ "${DEBUG}" == "1" ]] && echo -e "[DEBUG]: $*"
}
function __msg_info() {
[[ "${INFO}" == "1" ]] && echo -e "[INFO]: $*"
}
__msg_error "File could not be found. Cannot proceed"
__msg_debug "Starting script execution with 276MB of available RAM"
āĻāĻŽāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻŽāĻžāĻ° āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻŋāĻā§ āĻ§āĻ°āĻŖā§āĻ° āĻŽā§āĻāĻžāĻ¨āĻŋāĻāĻŽ āĻ°āĻžāĻāĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŋ __init
, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻ˛āĻāĻžāĻ° āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻāĻŦāĻ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻŦāĻž āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻŽāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¸ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻā§āĻ˛āĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻšā§āĻŦāĻžāĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻāĻ¨ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻĨā§āĻā§āĻ āĻ¸ā§āĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻ°āĻāĻŽ āĻāĻŋāĻā§:
$ ./run-script.sh --debug
āĻ¯āĻāĻ¨ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻāĻāĻŋ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°ā§ āĻ¯ā§ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ-āĻŦā§āĻ¯āĻžāĻĒā§ āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ˛ā§ āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻŽāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¸ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻŦāĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§ āĻāĻĒāĻ¯ā§āĻā§āĻ¤ āĻāĻŋāĻā§āĻ¤ā§ āĻ āĻ¨ā§āĻ¤āĻ¤ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻŽāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻāĻāĻžāĻ° āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻā§āĻ°ā§āĻĄ-āĻ āĻĢā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻŋ āĻāĻ°āĻŽā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻŋ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤ āĻ¨āĻ¯āĻŧ āĻ¤āĻžāĻ° āĻĒāĻāĻ¨ā§āĻĻ āĻāĻŦāĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ā§āĻ° āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāĻ°āĻŖā§āĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻĨāĻžāĻāĻŋ āĻ¯āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤āĨ¤
āĻĒā§āĻ¨āĻ°ā§āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ°ā§āĻāĻŋāĻā§āĻāĻāĻžāĻ° āĻāĻŦāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻ āĻŦāĻ¸ā§āĻĨāĻž āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ°
āĻŽāĻĄā§āĻ˛āĻžāĻ°/āĻĒā§āĻ¨āĻāĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ¯ā§āĻā§āĻ¯ āĻā§āĻĄ
âââ framework
â âââ common
â â âââ loggers.sh
â â âââ mail_reports.sh
â â âââ slack_reports.sh
â âââ daily_database_operation.sh
āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻ°āĻžāĻāĻŋ āĻ¯āĻž āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ/āĻŦā§āĻ¯āĻžāĻļ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻļā§āĻ°ā§ āĻāĻ°āĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¯āĻž āĻāĻŽāĻŋ āĻŦāĻŋāĻāĻžāĻļ āĻāĻ°āĻ¤ā§ āĻāĻžāĻāĨ¤ āĻĒā§āĻ¨āĻāĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻāĻŽāĻ¨ āĻ¯ā§āĻā§āĻ¨ā§ āĻāĻŋāĻā§ āĻāĻāĻāĻŋ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻāĻŦāĻ āĻ¸ā§āĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¯āĻŧ āĻāĻŽāĻ¨ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻāĻāĻžāĻŦā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋ āĻ¸āĻāĻāĻ āĻŋāĻ¤ āĻāĻ°āĻž āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻžāĻ° āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯āĻāĻžāĻŦā§ āĻšā§āĻ°āĻžāĻ¸ āĻāĻ°ā§ āĻāĻŦāĻ āĻā§āĻĄ āĻŦā§āĻ¸āĻāĻŋ āĻā§āĻ āĻāĻŦāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻ¸āĻšāĻ āĻ¤āĻžāĻ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°ā§āĨ¤
āĻāĻĒāĻ°ā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖā§āĻ° āĻŽāĻ¤ā§, āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ˛āĻāĻŋāĻ āĻĢāĻžāĻāĻļāĻ¨ āĻ¯ā§āĻŽāĻ¨ __msg_info
, __msg_error
āĻāĻŦāĻ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯, āĻ¯ā§āĻŽāĻ¨ āĻ¸ā§āĻ˛ā§āĻ¯āĻžāĻ āĻ°āĻŋāĻĒā§āĻ°ā§āĻ, āĻāĻ˛āĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻ°āĻ¯āĻŧā§āĻā§ common/*
āĻāĻŦāĻ āĻāĻ¤āĻŋāĻļā§āĻ˛āĻāĻžāĻŦā§ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ¤ā§ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ daily_database_operation.sh
.
āĻāĻāĻāĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻĒāĻŋāĻāĻ¨ā§ āĻā§āĻĄāĻŧā§ āĻĻāĻŋāĻ¨
āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻāĻŋ āĻāĻ˛āĻžāĻāĻžāĻ˛ā§āĻ¨ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻā§āĻ¨āĻ āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨ āĻ˛ā§āĻĄ āĻāĻ°āĻā§āĻ¨, āĻ¤āĻŦā§ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĄā§āĻāĻž āĻāĻāĻāĻŋ āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ āĻ¨āĻžāĻŽā§āĻ° āĻ¸āĻžāĻĨā§ āĻļā§āĻ¯āĻŧāĻžāĻ° āĻāĻ°āĻž āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ¤ā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ, āĻ¯ā§āĻŽāĻ¨ /tmp/AlRhYbD97/*
. āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ° āĻ¨āĻžāĻŽ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ āĻā§āĻā§āĻ¸āĻ āĻā§āĻ¨āĻžāĻ°ā§āĻāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
rand_dir_name="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1)"
āĻāĻžāĻ āĻļā§āĻˇ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§, āĻāĻĒāĻ°ā§ āĻāĻ˛ā§āĻāĻ¨āĻž āĻāĻ°āĻž āĻšā§āĻ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ°āĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻ āĻāĻžāĻ¤ā§āĻ¯āĻŧ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ¯āĻĻāĻŋ āĻ āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻā§āĻ˛āĻŋāĻ° āĻ¯āĻ¤ā§āĻ¨ āĻ¨āĻž āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ, āĻ¸ā§āĻā§āĻ˛āĻŋ āĻāĻŽāĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻāĻŋāĻā§ āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§ āĻšā§āĻ¸ā§āĻā§ āĻ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸ā§āĻˇā§āĻāĻŋ āĻāĻ°ā§, āĻ¯ā§āĻŽāĻ¨ āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻĄāĻŋāĻ¸ā§āĻāĨ¤
āĻ˛āĻ āĻĢāĻžāĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§
āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ āĻāĻĒāĻ¨āĻžāĻā§ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¯ā§ āĻā§āĻ¨āĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¸āĻŽāĻ¯āĻŧā§ āĻāĻāĻāĻŋ āĻšā§āĻ¸ā§āĻā§ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻāĻ˛āĻā§āĨ¤ āĻāĻāĻŋ āĻ˛āĻ āĻĢāĻžāĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻŽāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ˛āĻ āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ /tmp/project_name/*.lock
āĻāĻŦāĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻļā§āĻ°ā§āĻ¤ā§ āĻ¤āĻžāĻĻā§āĻ° āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨āĨ¤ āĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻāĻŋāĻā§ āĻ¸ā§āĻ¨ā§āĻĻāĻ°āĻāĻžāĻŦā§ āĻļā§āĻˇ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛āĻāĻžāĻŦā§ āĻāĻ˛āĻŽāĻžāĻ¨ āĻ
āĻ¨ā§āĻ¯ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻ
āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻ
āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻĄāĻŧāĻžāĻ¤ā§ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻž āĻāĻ°ā§āĨ¤ āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻšā§āĻ¸ā§āĻā§ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛āĻāĻžāĻŦā§ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ˛ā§ āĻ˛āĻ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤
āĻĒāĻ°āĻŋāĻŽāĻžāĻĒ āĻāĻŦāĻ āĻāĻ¨ā§āĻ¨āĻ¤
āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻ āĻāĻŽāĻ¨ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¯āĻž āĻĻā§āĻ°ā§āĻ āĻ¸āĻŽāĻ¯āĻŧ āĻ§āĻ°ā§ āĻāĻ˛ā§, āĻ¯ā§āĻŽāĻ¨ āĻĻā§āĻ¨āĻŋāĻ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻ āĻĒāĻžāĻ°ā§āĻļāĻ¨āĨ¤ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ˛āĻžāĻĒāĻā§āĻ˛āĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ§āĻžāĻĒāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻā§āĻ°āĻŽ āĻāĻĄāĻŧāĻŋāĻ¤: āĻĄā§āĻāĻž āĻ˛ā§āĻĄ āĻāĻ°āĻž, āĻ āĻ¸āĻā§āĻāĻ¤āĻŋāĻā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž, āĻĄā§āĻāĻž āĻāĻŽāĻĻāĻžāĻ¨āĻŋ āĻāĻ°āĻž, āĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻĻāĻ¨ āĻĒāĻžāĻ āĻžāĻ¨ā§ āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋāĨ¤
āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻāĻŽāĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻāĻŋāĻā§ āĻāĻ˛āĻžāĻĻāĻž āĻā§āĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§ āĻāĻžāĻāĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŋ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻāĻŦāĻ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻāĻ°āĻŋ:
time source "${filepath}" "${args}">> "${LOG_DIR}/RUN_LOG" 2>&1
āĻĒāĻ°ā§ āĻāĻŽāĻŋ āĻāĻ° āĻ¸āĻžāĻĨā§ āĻŽā§āĻ¤ā§āĻ¯ā§āĻĻāĻ¨ā§āĻĄā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ:
tac "${LOG_DIR}/RUN_LOG.txt" | grep -m1 "real"
āĻāĻāĻŋ āĻāĻŽāĻžāĻā§ āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻžāĻ¨ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻāĻŽāĻ¨ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž/āĻ§ā§āĻ° āĻāĻ˛āĻžāĻāĻž āĻ¸āĻ¨āĻžāĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻž āĻāĻ°ā§āĨ¤
āĻ¸ā§āĻāĻžāĻā§āĻ¯ āĻāĻžāĻŽāĻ¨āĻž āĻāĻ°āĻāĻŋ!
āĻāĻ° āĻāĻŋ āĻĒāĻĄāĻŧāĻ¤ā§ āĻšāĻŦā§:
āĻ¯āĻžāĻ¨ āĻāĻŦāĻ GPU āĻā§āĻ¯āĻžāĻļā§. Mail.ru āĻā§āĻ˛āĻžāĻāĻĄ āĻ¸āĻ˛āĻŋāĻāĻļāĻ¨ā§āĻ° S3 āĻ āĻŦāĻā§āĻā§āĻ āĻ¸ā§āĻā§āĻ°ā§āĻā§ āĻāĻ¯āĻŧā§āĻŦāĻšā§āĻā§āĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻāĻā§āĻ¨ā§āĻ-āĻāĻžāĻ˛āĻŋāĻ¤ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖāĨ¤ āĻĄāĻŋāĻāĻŋāĻāĻžāĻ˛ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻ˛āĻŋāĻā§āĻ°āĻžāĻŽ āĻā§āĻ¯āĻžāĻ¨ā§āĻ˛āĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com