#!/bin/bash cat <<-EOF #!/bin/bash #========================================= # Company : Boyachain # Create : $(date +"%F %R") # Author : Who the f**k r u! #========================================= set -euo pipefail umask 0022 export LANG=en_US.UTF-8 PID_FILE=/tmp/\$(basename \${0%.sh}).pid if [ -t 0 ]; then function Print { echo -e "\033[36;1m\$(date +'[%F %T]')\033[32;1m \$*\033[0m"; } function Warn { echo -e "\033[36;1m\$(date +'[%F %T]')\033[33;1m \$*\033[0m"; } function Error { echo -e "\033[36;1m\$(date +'[%F %T]')\033[31;1m \$*\033[0m"; exit 1; } else #exec &> \${0%.sh}.out function Print { echo -e "\$(date +'[%F %T INFO]') \$*"; } function Warn { echo -e "\$(date +'[%F %T WARN]') \$*"; } function Error { echo -e "\$(date +'[%F %T ERROR]') \$*"; exit 1; } fi function Quit { local exitCode=\$? rm -f \$PID_FILE [ 0 -ne \$exitCode ] && Error Failed to xxxx! [ -z "\${END:-}" ] && echo && Error Interrupted manually! Print Succeeded to xxxx. } function Func1 { Warn Func1 ... } function Func2 { Warn Func2 ... } function CheckLock { Warn Checking lock ... [ -e "\$PID_FILE" ] \\ && [ -d "/proc/\$(cat \$PID_FILE)" ] \\ && cat /proc/\$(cat \$PID_FILE)/cmdline \\ && echo \\ && Error Pid file \$PID_FILE already exists, quit! echo \$\$ > \$PID_FILE } function Main { CheckLock trap Quit EXIT Warn Main ... Func1 Func2 END=1 } # Start here Main EOF