เชฌเซเชถ เชธเซเชเซเชฐเชฟเชชเซเชเชจเซ เชกเซเชฌเช เชเชฐเชตเซเช เช เชเชพเชธเชจเซ เชเชเชเซเชฎเชพเชเชฅเซ เชธเซเชฏ เชถเซเชงเชตเชพ เชเซเชตเซเช เชเซ, เชเชพเชธ เชเชฐเซเชจเซ เชเซเชฏเชพเชฐเซ เชฌเชเชงเชพเชฐเชฃ, เชฒเซเชเซเชเช เช เชจเซ เชตเชฟเชถเซเชตเชธเชจเซเชฏเชคเชพเชจเชพ เชฎเซเชฆเซเชฆเชพเชเชจเซ เชธเชฎเชฏเชธเชฐ เชงเซเชฏเชพเชจเชฎเชพเช เชฒเซเชงเชพ เชตเชฟเชจเชพ เชนเชพเชฒเชจเชพ เชเซเชกเชฌเซเชเชฎเชพเช เชจเชตเชพ เชเชฎเซเชฐเชพเช เชฆเซเชเชพเชฏ เชเซ. เชคเชฎเซ เชคเชฎเชพเชฐเซ เชชเซเชคเชพเชจเซ เชญเซเชฒเซเชจเซ เชฒเซเชงเซ เช เชฅเชตเชพ เชธเซเชเซเชฐเชฟเชชเซเชเชจเชพ เชเชเชฟเชฒ เชขเชเชฒเชพเชจเซเช เชธเชเชเชพเชฒเชจ เชเชฐเชคเซ เชตเชเชคเซ เชเชตเซ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชเชฎเชพเช เชคเชฎเชพเชฐเซ เชเชพเชคเชจเซ เชถเซเชงเซ เชถเชเซ เชเซ.
เชเซเชฎ
เชฒเซเชเชฎเชพเช, เชฒเซเชเช เชเซเชฒเซเชฒเชพ เชเซเชเชฒเชพเช เชตเชฐเซเชทเซเชฎเชพเช เชคเซเชฃเซ เชเซ เชถเซเชเซเชฏเชพ เชเซ เชคเซ เชถเซเชฐ เชเชฐเซ เชเซ, เชคเซเชฎเช เชเซเชเชฒเซเช เชธเชพเชฎเชพเชจเซเชฏ เชญเซเชฒเซ เชเซ เชเซเชฃเซ เชคเซเชจเซ เชฐเชเซเชทเชเชฅเซ เชฆเซเชฐ เชฐเชพเชเซเชฏเซ เชเซ. เช เช
เชเชคเซเชฏเชจเซเช เชเซ เชเชพเชฐเชฃ เชเซ เชฆเชฐเซเช เชธเซเชซเซเชเชตเซเชฐ เชกเซเชตเชฒเชชเชฐ, เชคเซเชฎเชจเซ เชเชพเชฐเชเชฟเชฐเซเชฆเซเชจเชพ เช
เชฎเซเช เชคเชฌเชเซเชเซ, เชจเชฟเชฏเชฎเชฟเชค เชเชพเชฐเซเชฏ เชเชพเชฐเซเชฏเซเชจเซ เชธเซเชตเชเชพเชฒเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชธเซเชเซเชฐเชฟเชชเซเช เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเซ เชเซ.
เชเซเชฐเซเชช เชนเซเชจเซเชกเชฒเชฐเซเชธ
เชธเซเชเซเชฐเชฟเชชเซเช เชเชเซเชเซเชเซเชฏเซเชถเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชเซเชฏเชพเชฐเซ เชเชเชเช เช เชฃเชงเชพเชฐเซเชฏเซเช เชฌเชจเซ เชเซ เชคเซเชฏเชพเชฐเซ เชฎเซเช เช เชจเซเชญเชตเซเชฒเซ เชฎเซเชเชพเชญเชพเชเชจเซ เชฌเซเชถ เชธเซเชเซเชฐเชฟเชชเซเชเซ เชเซเชฏเชพเชฐเซเชฏ เช เชธเชฐเชเชพเชฐเช เชเซเชฒเชฟเชจเช เชช เชฎเชฟเชเซเชจเชฟเชเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเชคเซ เชจเชฅเซ.
เชฌเชนเชพเชฐเชฅเซ เชเชถเซเชเชฐเซเชฏ เชชเซเชฆเชพ เชฅเช เชถเชเซ เชเซ, เชเซเชฎ เชเซ เชเซเชฐเชฎเชพเชเชฅเซ เชธเชฟเชเซเชจเชฒ เชฎเซเชณเชตเชตเซเช. เชธเซเชเซเชฐเชฟเชชเซเชเซ เชชเซเชฐเซเชกเชเซเชถเชจ เชธเชฟเชธเซเชเชฎเซเชธ เชชเชฐ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชชเซเชฐเชคเซ เชตเชฟเชถเซเชตเชธเชจเซเชฏ เชเซ เชคเซเชจเซ เชเชพเชคเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชตเชพ เชเซเชธเซเชจเซเช เชธเชเชเชพเชฒเชจ เชเชฐเชตเซเช เช เชคเซเชฏเชเชค เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชเซ. เชนเซเช เชตเชพเชฐเชเชตเชพเชฐ เชเชจเชพ เชเซเชตเชพ เชฆเซเชถเซเชฏเซเชจเซ เชเชตเชพเชฌ เชเชชเชตเชพ เชฎเชพเชเซ เชเชเซเชเชฟเช เชนเซเชจเซเชกเชฒเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช:
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
เช เชฐเซเชคเซ เชธเซเชเซเชฐเชฟเชชเซเช เชฒเชเชตเชพเชฅเซ เชคเชฎเชจเซ เชธเซเชเซเชฐเชฟเชชเซเชเชฎเชพเชเชจเชพ เชคเชฎเชพเชฎ เชเชฆเซเชถเซเชจเชพ เชตเชฐเซเชคเชจ เชตเชฟเชถเซ เชตเชงเซ เชธเชพเชตเชเซเชค เชฐเชนเซเชตเชพเชจเซ เชซเชฐเช เชชเชกเซ เชเซ เช เชจเซ เชคเซ เชคเชฎเชจเซ เชเชถเซเชเชฐเซเชฏเชเชเชฟเชค เชเชฐเซ เชคเซ เชชเชนเซเชฒเชพเช เชญเซเชฒเชจเซ เชธเชเชญเชพเชตเชจเชพเชจเซ เช เชชเซเชเซเชทเชพ เชฐเชพเชเซ เชเซ.
เชตเชฟเชเชพเชธ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชญเซเชฒเซ เชถเซเชงเชตเชพ เชฎเชพเชเซ เชถเซเชฒเชเซเช
เชคเซ เชเชเชเช เชธเชเชเชฒเชฟเชค เชตเชฐเซเชฅ เชเซ
เชนเซเช เชคเซเชจเซ เชเชชเชฏเซเช เชฎเชพเชฐเชพ เชธเซเชฅเชพเชจเชฟเช เชตเชฟเชเชพเชธ เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช เชตเชพเชเซเชฏเชฐเชเชจเชพ, เชธเชฟเชฎเซเชจเซเชเชฟเชเซเชธ เช เชจเซ เชเซเชกเชฎเชพเชเชจเซ เชเซเชเชฒเซเช เชญเซเชฒเซ เชตเชฟเชถเซ เชฐเชฟเชชเซเชฐเซเชเซเชธ เชฎเซเชณเชตเชตเชพ เชฎเชพเชเซ เชเชฐเซเช เชเซเช เชเซ เชตเชฟเชเชพเชธ เชเชฐเชคเซ เชตเชเชคเซ เชนเซเช เชเซเชเซ เชเชฏเซ เชนเซเชเชถ. เช เชคเชฎเชพเชฐเซ เชฌเซเชถ เชธเซเชเซเชฐเชฟเชชเซเชเซเชธ เชฎเชพเชเซ เชเช เชธเซเชฅเชฟเชฐ เชตเชฟเชถเซเชฒเซเชทเชฃ เชธเชพเชงเชจ เชเซ เช เชจเซ เชนเซเช เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชเซเชฌ เชญเชฒเชพเชฎเชฃ เชเชฐเซเช เชเซเช.
เชคเชฎเชพเชฐเชพ เชชเซเชคเชพเชจเชพ เชเชเซเชเชฟเช เชเซเชกเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ
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