bash script áá»á¬ážááᯠá¡ááŸá¬ážááŸá¬ááŒááºážááẠáá±á¬ááºááá¯ážáá¯á¶á¡ááœááºáž á¡ááºáá áºáá»á±á¬ááºážááᯠááŸá¬ááœá±ááŒááºážááŸáá·áº áá°áááºá á¡áá°ážáááŒáá·áº áááºáá±á¬ááºáá¯á¶á ááŸááºáááºážááŸáá·áº áá¯á¶ááŒááºá áááºáá»áááŸá¯ááá¯ááºáᬠááŒá¿áá¬áá»á¬ážááᯠá¡áá»áááºááŸáá·áºáá áºááŒá±ážáá® ááá·áºááœááºážá ááºážá á¬ážááŒááºážáááŸááá² áááºááŸá codebase ááœáẠáááºááá¯ážá¡áá áºáá»á¬áž áá±á«áºáá¬ááá·áºá¡áá«ááœáẠááŒá áºáááºá ááá·áºááá¯ááºááá¯ááºá¡ááŸá¬ážááœá±ááŒá±á¬áá·áº áá«ááŸááá¯áẠááŸá¯ááºááœá±ážáá²á· script ááœá±ááᯠá á®áá¶ááá·áºááœá²áá²á·á¡áá« áá®ááá¯á¡ááŒá±á¡áá±áá»áá¯ážááŸá¬ áááºááœá±á·ááá¯ááºáá«áááºá
á¡ááœá²á·
áá±á¬ááºážáá«ážááœáẠá
á¬áá±ážáá°ááẠááœááºáá²á·ááá·áºááŸá
áºá¡áááºážáááºá¡ááœááºáž áá°áá±á·áá¬áááºáá°áá²á·ááá·áºá¡áá¬áá»á¬ážá¡ááŒáẠáááááŒá¯ááá
á±áá±á¬ á¡ááŸá¬ážá¡áá»áá¯á·ááá¯áááºáž áá»áŸáá±áá«áááºá áá±á¬á·ááºáá²ááºáá±á¬á·ááºáá²ááºáá±á¬á·ááºáá²ááºáá±á¬á·ááºáá²áá±ážáá¬ážáá°ááá¯ááºážááẠáááºážááá¯á·áá¡áááºááœá±ážáááºážááŒá±á¬ááºážááœáẠáá
áºáá»áááºáá»áááºááœááºá áá¯ááºááá¯ážáá¯ááºá
ááºá¡áá¯ááºáá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬ááºááŒááºááŒá
áºá
á±áááºá¡ááœáẠscripts áá»á¬ážááŸáá·áºá¡áá¯ááºáá¯ááºáá±á¬ááŒá±á¬áá·áº á¡áá±ážááŒá®ážáá«áááºá
áá±á¬ááºáá»á±á¬áẠááá¯ááºááœááºáá°áá»á¬áž
áá»áœááºáá±á¬áºááŒá¯á¶ááœá±á·áá°ážáá±á¬ bash script á¡áá»á¬ážá á¯ááẠscript execute áá¯ááºáá±á ááºá¡ááœááºáž ááá»áŸá±á¬áºááá·áºáá¬ážáá±á¬ á¡áá¬áá áºáá¯ááŒá áºáá±á«áºáá¬áá±á¬á¡áá« áááá±á¬ááºáá±á¬ ááŸááºážáááºážáá±ážááá¹ááá¬ážááᯠááá¯á¶ážáá«á
á¡á°ááá¯ááºá០á¡áá»ááºááŒááŸá¯ááᯠáááºáá¶ááŒááºážáá²á·ááá¯á·áá±á¬ ááŒááºáá០á¡á¶á·á¡á¬ážááá·áºááŸá¯áá»á¬áž ááŒá áºáá±á«áºáá¬ááá¯ááºáááºá áá¬ááºááœáŸááºážáá»á¬ážááẠáá¯ááºáá¯ááºáá±ážá áá áºáá»á¬ážáá±á«áºááœáẠáá¯ááºáá±á¬ááºááẠáá¯á¶áá±á¬ááºáá±á¬ áá¯á¶ááŒááºá áááºáá»áááŒá±á¬ááºáž áá±áá»á¬á á±ááẠá¡ááá¯áá«ááá á¹á áá»á¬ážááᯠááá¯ááºááœááºááẠá¡ááœááºá¡áá±ážááŒá®ážáá«áááºá á€áá²á·ááá¯á·áá±á¬ á¡ááŒá±á¡áá±áá»á¬ážááᯠáá¯á¶á·ááŒááºáááºá¡ááœáẠááœááºáá±á«ááºáááºááá¯ááºáá»á¬ážááᯠáá»áœááºá¯ááºáááŒá¬ááá¡áá¯á¶ážááŒá¯áááº-
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
á¡áá»ááºááŒááŸá¯áá»á¬ážááŸááá«á áá±á«áºááá·áº ááŸááºážáááºážáá±ážáá¯ááºáá±á¬ááºáá»ááºááᯠááŸááºáá¯á¶áááºááẠáá°áá®áá±ážááá·áº shell built-in command áá
áºáá¯ááŒá
áºáááºá ááá¯á·áá±á¬áº ááá¯áá²á·ááá¯á·áá±á¬ ááá¯ááºááœááºáá°áá»á¬ážááŸáá·áº á¡áá°ážááá¯á
áá¯ááºááá·áºáááºá SIGINT
áá¬ááºááœáŸááºážáá»ááºááœá¬ážá
á±áááºá
ááá¯á·á¡ááŒáẠááá
á¹á
á¡áá»á¬ážá
á¯ááœáẠáááºáᬠáááºážááá·áºáááºá EXIT
áá«áá±ááá·áº á¡áá¯ááºáá®áá¬ááá±á¬á· á¡áá»ááºááŒáá
áºáá¯áá»ááºážá
á®á¡ááœáẠscript áá²á· á¡áá°á¡áá»áá·áºááœá±ááᯠáááºá¡ááŸááºáááẠá
áááºááŒáá¯ááºááŒááºáááºááá¯ááºáá«áááºá
Built-in set áá¯ááºáá±á¬ááºáá»ááºáá»á¬áž - á¡ááŸá¬ážá¡ááœááºážáá±á«áº á¡ááŒááºáááºá á²ááŒááºážá
á¡ááŸá¬ážáá»á¬áž ááŒá áºáá±á«áºáá¬áááºááŸáá·áº áááŒáá¯ááºááẠáá¯á¶á·ááŒááºáááºááŸáá·áº á¡ááŒááºáá¯ááºáá±á¬ááºááŒááºážááᯠáááºááẠá¡ááœááºá¡áá±ážááŒá®ážáá«áááºá á€áá²á·ááá¯á·áá±á¬ command ááá¯áááºáááºáá¯ááºáá±á¬ááºááŒááºážáááºááá¯ááá¯ááá¯ážááœá¬ážááá¯ááºáááº-
rm -rf ${directory_name}/*
variable ááᯠáááááŒá¯áá«á directory_name
ááááºááŸááºá
ááá¯ááá¯á·áá±á¬á¡ááŒá±á¡áá±áá»á¬ážááá¯ááá¯ááºááœááºááẠbuilt-in áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááá¯á¡áá¯á¶ážááŒá¯áááºá¡áá±ážááŒá®ážáá«áááºá set
ááá¯ááá¯á·áá±á¬á¡ááŒá
Ạset -o errexit
, set -o pipefail
ááá¯á·ááá¯áẠset -o nounset
áá¬ááºááœáŸááºážáá²á·á¡á
ááŸá¬á áááºá script ááẠáá¯áááá¯ááºáá±á¬ ááœááºáá±á«ááºáá¯ááºá áááºááŸááºááá¬ážáá±á¬ ááááºážááŸááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŸá¯á ááá¯ááºáá
áºáá¯á០ááŒááºááœá¬ážáá±á¬ áááŸááºáááºáá±á¬ ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬ážááŸáá·áº ááŒá¯á¶ááœá±á·áááºááŸáá·áº áááŒáá¯ááºááẠá€áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠááœááºááœá¬ážááŒá±á¬ááºáž áá±áá»á¬á
á±áááº-
#!/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
ááŸááºáá»ááº: Built-in á¡á
ááŸááá²á· Function ááœá±áá«á 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
á€áááºážááŒáá·áº scripts áá»á¬ážáá±ážáá¬ážááŒááºážááẠááá·áºá¡á¬áž script á¡ááœááºážááŸá command áá»á¬ážá¡á¬ážáá¯á¶ážá á¡ááŒá¯á¡áá°ááŸáá·áº áááºáááºá ááá¯ááá¯ááááá¬ážáááºááŸáá·áº áááºážááẠááá·áºá¡á¬áž áá¡á¶á·ááŒáá®ááœáẠá¡ááŸá¬ážá¡ááœááºážáá áºáᯠááŒá áºááá¯ááºááŒá±ááᯠááŒáá¯áááºááá·áºááŸááºážááẠááœááºážá¡á¬ážáá±ážáá«áááºá
ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááœááºáž á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠááŸá¬ááœá±ááẠShellCheck
áá±á«ááºážá
ááºážááá»áá¯ážáááºáá«áááºá
áá®ááœááºáá±á ááºá¡ááœááºáž ááœá²áá»á±á¬áºááœá¬ážááá¯ááºááá·áº áá¯ááºááŸá á¡áá¬ážá¡ááá¯á á¡áááá¹áá¬ááºááŸáá·áº á¡áá»áá¯á·áá±á¬ á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠááá°ááẠáá»áœááºá¯ááºá áá±áááá¯ááºáᬠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ áááºáááºážáá»ááºáá»á¬ážááœáẠáááºážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá áááºážááẠáááºá bash scripts áá»á¬ážá¡ááœáẠstatic analysis tool áá áºáá¯ááŒá áºááŒá®áž áááºážááá¯á¡áá¯á¶ážááŒá¯ááẠá¡áá°ážá¡ááŒá¶ááŒá¯ááá¯áá«áááºá
ááá·áºááá¯ááºááá¯áẠááœááºáá±á«ááºáá¯ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá
POSIX ááŸá ááŒááºáá±ážáá¯ááºáá»á¬ážááẠáá¯á ááá¯á·ááá¯áẠáá áºáá¯áá»áŸáá¬ááá¯ááºáá² áá¯á ááá¯á·ááá¯áẠáá¯áááá¯ááºáá±á¬ áááºááá¯ážáá áºáá¯ááŒá áºáááºá á¡áá»áá¯ážáá»áá¯ážáá±á¬á¡ááŸá¬ážá¡ááœááºážááá á¹á áá»á¬ážá¡ááœáẠá áááºááŒáá¯ááºá¡ááŸá¬ážáá¯ááºáá»á¬áž (201-254 á¡ááŒá¬áž) ááᯠááŒááºáá±ážááẠá€á¡ááºá¹áá«áááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«á
á¡ááŸá¬ážá¡ááœááºáž á¡áá»áá¯ážá¡á á¬ážááᯠá¡ááá¡áá» ááááŸááá¬ážáááºááŒá®áž áá»á±á¬áºáá®á áœá¬ áá¯á¶á·ááŒááºááẠááá·áºá¡á¬áž ááŒá¯á¶áá¯á¶áá¬ážááá·áº á¡ááŒá¬áž script áá»á¬ážá០á€á¡áá»ááºá¡áááºááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá
#!/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
}
ááŸááºáá»ááº: áááºáááºážáá»áẠááááºážááŸááºáá»á¬ážááᯠááá±á¬áºáá ááœáŸááºážááá¯ážááŒááºážá០ááŸá±á¬ááºááŸá¬ážááẠáááºáááºááŸááºáá¬ážáá±á¬ ááááºážááŸááºá¡áááºáá»á¬ážááᯠá¡áá°ážááááá¬ážáá«á
ááŸááºáááºážáá¯ááºáá±á¬ááºáá»ááºáá»á¬áž
ááá·áº script áááááºáá»á¬ážááᯠááœááºáá°á
áœá¬ áá¬ážáááºááá¯ááºááẠááŸáááŒá®áž á
áá
áºááá» ááŸááºáááºážááœááºážááŒááºážááẠá¡áá±ážááŒá®ážáá«áááºá á¡ááŒá¬ážá¡ááá·áºááŒáá·áºáááá¯ááááºážáááºážáá¬áá¬á
áá¬ážáá»á¬ážáá²á·ááá¯á·áááºá áá»áœááºá¯ááºááẠáá»áœááºá¯ááºá bash script áá»á¬ážáá²á·ááá¯á·áá±á¬ áá°áááºáž logging functions áá»á¬ážááᯠá¡ááŒá²áá¯á¶ážáá«áááºá __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
ááá¯ááá¯á·áá±á¬ logger variable áá»á¬ážááŸáá·áº á¡ááŒá¬ážáá±á¬ system variable áá»á¬ážááᯠá¡á
áá»áá¯ážááŒááºáž ááá¯á·ááá¯áẠáá¯á¶áá±áááºááá¯ážáá»á¬ážá¡ááŒá
ẠáááºááŸááºáá¬ážááá·áºáá±áá¬ááœááºá script invocation áá¯ááºáá±á
ááºááœáẠá¡ááá¯áá« variable áá»á¬ážááᯠcommand line ááœá±ážáá»ááºááŸá¯áá»á¬ážá០áááºááŸááºááá¯ááºáááºá
á¥ááá¬á¡á¬ážááŒáá·áºá
$ ./run-script.sh --debug
ááá¯ááá¯á·áá±á¬ script ááá¯áá¯ááºáá±á¬ááºáá±á¬á¡áá«á ááá¯á¡ááºáá«á á áá áºáá áºáá¯áá¯á¶ážáááºáááºáá»á¬ážááᯠáá¯á¶áá±áááºááá¯ážáá»á¬ážáááºááŸááºáá¬ážáááºá ááá¯á·ááá¯áẠá¡áááºážáá¯á¶áž ááá¯á¡ááºáá«á ááá·áºáá»á±á¬áºáá±á¬áá áºáá¯áá¯ááá¯á· á¡á ááŒá¯áá¯ááºáá±á¬ááºááŒá±á¬ááºáž áá±áá»á¬á á±áááºá
áá»áœááºá¯ááºááẠá¡áá¯á¶ážááŒá¯áá° á¡ááºáá¬áá±á·á áºááŸáá·áº á¡áá¯á¶ážááŒá¯áá°/ááá·áºááœááºážááá·áºááá·áº ááœá²á·á ááºážááŸá¯á¡áá±ážá áááºáá»á¬ážááŒá¬áž á¡áá±ážá¡áá°áá áºáá¯ááœáẠá¡á ááŒá¯áááá·áºá¡áá¬ááŸáá·áº áá¬áá¯ááºááááºááᯠááœá±ážáá»ááºááŸá¯á¡áá±á«áº á¡ááŒá±áá¶áááºá
ááŒááºáááºá¡áá¯á¶ážááŒá¯áááºááŸáá·áº ááá·áºááŸááºážááŸá¯á áá áºá¡ááœáẠáááá¯áá¬ááá¬
áá±á¬áºáá»á°áá¬/ááŒááºáá¯á¶ážááá¯ááºáá±á¬ áá¯ááº
âââ framework
â âââ common
â â âââ loggers.sh
â â âââ mail_reports.sh
â â âââ slack_reports.sh
â âââ daily_database_operation.sh
áá»áœááºá¯ááºáá®ááœááºááá¯áá±á¬ ááá±á¬áá»ááº/ bash script á¡áá áºááᯠá¡á ááŒá¯ááẠá¡áá¯á¶ážááŒá¯ááá¯ááºááá·áº áá®ážááŒá¬áž repository áá áºáá¯ááᯠááááºážáááºážáá¬ážáááºá ááŒááºáááºá¡áá¯á¶ážááŒá¯ááá¯ááºááá·áº áááºááá·áºá¡áá¬ááá¯áááᯠrepository ááœáẠááááºážáááºážááá¯ááºááŒá®áž ááá¯áá¯ááºáá±á¬ááºáá»ááºááᯠá¡áá¯á¶ážááŒá¯ááá¯áá±á¬ á¡ááŒá¬ážááá±á¬áá»ááºáá»á¬ážá០ááŒááºáááºááá°ááá¯ááºáááºá á€áááºážááŒáá·áº ááá±á¬áá»ááºáá»á¬ážááᯠá á¯á ááºážááŒááºážááẠá¡ááŒá¬ážáá±á¬ script áá»á¬ážá á¡ááœááºá¡á á¬ážááᯠáááá¬áááºááŸá¬ážá áœá¬ áá»áŸá±á¬á·áá»áá±ážááŒá®áž áá¯ááºá¡ááŒá±áá¶ááẠáá±ážáááºááŒá®áž á ááºážáááºááẠááœááºáá°ááŒá±á¬ááºážáááºáž áá±áá»á¬á á±áááºá
á¡áááºáá±á¬áºááŒáá«á¥ááá¬ááœááºáá²á·ááá¯á·á áá²á·ááá¯á·áá±á¬ loggging functions áá»á¬ážá¡á¬ážáá¯á¶áž __msg_info
, __msg_error
ááŸáá·áº Slack á¡á
á®áááºáá¶á
á¬áá»á¬ážáá²á·ááá¯á·áá±á¬ á¡ááŒá¬ážá¡áá¬áá»á¬ážááᯠáá®ážááŒá¬ážá
á®áá«ááŸááááºá 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)"
á¡áá¯ááºááŒá®ážáá«áá á¡áááºááœááºáá±á¬áºááŒáá¬ážáá±á¬ áá»áááºáááºááá¯ááºáááááá¬áá»á¬ážááœáẠá¡ááá¯áá«áááºážááœáŸááºáá»á¬ážááᯠááŸááºážáááºážáá±ážááá¯ááºáá«áááºá áá¬áá®áááºážááœáŸááºáá»á¬ážááᯠááá¯áá áá¯ááºáá«á áááºážááá¯á·ááẠá á¯ááŒá¯á¶áá±ááŒá®áž á¡áá»áá¯á·áá±á¬á¡ááá·áºááœáẠá¡ááŒáá·áºá¡ááá áºáá²á·ááá¯á·áá±á¬ host ááœáẠááá»áŸá±á¬áºááá·áºáá¬ážáá±á¬ááŒá¿áá¬áá»á¬ážááᯠááŒá áºá á±áááºá
áá±á¬á·ááºááá¯ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá
áááŒá¬ááááá¯áááᯠscript áá áºáá¯áá¥ááá¬áá áºáá¯áᬠhost áá áºáá¯áá±á«áºááœááºá¡áá¯ááºáá¯ááºáá±ááŒá±á¬ááºážáá±áá»á¬á á±áááºáááŒá¬ááááá¯á¡ááºáááºá áá±á¬á·ááºááá¯ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºážááᯠáá¯ááºáá±á¬ááºááá¯ááºáááºá
áá±á¬á·áááºáá¬ážáá²á· ááá¯ááºááœá±ááᯠáá»áœááºáá±á¬áº áááºáá®ážáá±á·ááŸááá«áááºá /tmp/project_name/*.lock
áá¬ááºááœáŸááºážáá¡á
ááœáẠáááºážááá¯á·áááŸááá±ááŒááºážááŸááááŸá á
á
áºáá±ážáá«á áááºážááẠáá¬ááºááœáŸááºážááᯠáá»á±á¬ááœá±á·á
áœá¬ á¡áá¯á¶ážáááºá
á±ááŒá®áž á¡ááŒáá¯ááºáá¯ááºáá±á¬ááºáá±ááá·áº á¡ááŒá¬ážáá±á¬ script ááŒáá·áº á
áá
áºá¡ááŒá±á¡áá±ááá¯á· ááá»áŸá±á¬áºááá·áºáá¬ážáá±á¬ á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááŸá±á¬ááºááŸá¬ážááẠáá°áá®áá±ážáááºá áá±ážáá¬ážáá±á¬ host áá
áºáá¯áá±á«áºááœáẠáá°áá®áá±á¬ script ááᯠá¡ááŒáá¯ááºáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáá«á áá±á¬á·ááºááá¯ááºáá»á¬ážááᯠáááá¯á¡ááºáá«á
ááá¯ááºážáá¬ááŒá®áž ááá¯ážáááºá¡á±á¬ááºáá¯ááºáá«á
áá»áœááºá¯ááºááá¯á·ááẠáá±á·á ááºáá±áá¬áá±á·á áºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážáá²á·ááá¯á·áá±á¬ á¡áá»áááºááŒá¬ááŒáá·áºá áœá¬ áá¯ááºáá±á¬ááºááá·áº script áá»á¬ážááŸáá·áº áááŒá¬áááá¯ááºáá±á¬ááºááẠááá¯á¡ááºáá«áááºá ááá¯ááá¯á·áá±á¬áá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááœáẠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº á¡ááá·áºáá»á¬ážáá«áááºáááº- áá±áá¬ááœáá·áºááŒááºážá ááœá²ááœá²áá»ááºáá»á¬ážááá¯á á áºáá±ážááŒááºážá áá±áá¬áááºááœááºážááŒááºážá á¡ááŒá±á¡áá±á¡á á®áááºáá¶á á¬áá±ážááá¯á·ááŒááºážá áááºááŒáá·áºá
ááá¯ááá¯á·áá±á¬á¡ááŒá±á¡áá±áá»áá¯ážááœááºá áá»áœááºá¯ááºááẠáá¬ááºááœáŸááºážááᯠáá®ážááŒá¬ážá¡áá±ážá á¬áž script áá»á¬ážá¡ááŒá Ạááœá²ááŒááºážááŒá®áž áááºážááá¯á·á á¡ááŒá±á¡áá±ááŸáá·áº áá¯ááºáá±á¬ááºáá»áááºááᯠá¡áá¯á¶ážááŒá¯á á¡á á®áááºáá¶ááẠá¡ááŒá²ááŒáá¯ážá á¬ážáááº-
time source "${filepath}" "${args}">> "${LOG_DIR}/RUN_LOG" 2>&1
áá±á¬ááºááá¯ááºážááœáẠááœááºáá»ááºááá·áºá¡áá»áááºááᯠááŒááºááá¯ááºáááº-
tac "${LOG_DIR}/RUN_LOG.txt" | grep -m1 "real"
áááºážááẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááẠááá¯á¡ááºáá±á¬ scripts áá»á¬ážááŸá ááŒá¿áá¬/ááŸá±ážááœá±ážáá±á¬áá±áá¬áá»á¬ážááᯠáá±á¬áºáá¯ááºááẠáá»áœááºá¯ááºá¡á¬áž áá°áá®áá±ážáá«áááºá
áá¶áá±á¬ááºážáá«á á±!
áá±á¬ááºáááºáááºá áá¬áá»á¬áž
ááœá¬ážááŒá®áž GPU áááºááŸáºá Mail.ru Cloud Solutions á S3 á¡áá¬ááá¹áá¯ááá¯ááŸá±á¬ááºááŸá¯ááœáẠwebhooks áá»á¬ážááá¯á¡ááŒá±áá¶áá¬ážáá±á¬ ááŒá áºáááºááŸáá±á¬ááºážááŸááºááá·áºá¡ááºááºáá áºáá¯áá¥ááá¬á áá áºáá»á áºáááºá¡ááœááºááŒá±á¬ááºážááŒááºážá¡ááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·áááŒá±ážáááºážááá¯ááºážá
source: www.habr.com