...
Далее Вы сможете так же отключиться в любой момент по нажатию Ctrl-A d и подключиться обратно в новой сессии SSH по:
...
Code Block | ||
---|---|---|
| ||
cat > stab_zfs.sh <<EOT #!/bin/bash get_duration() { IFS=':' read -r -a tm <<< "\$1" num=\${#tm[@]} delta=\$((\${tm[0]} * 3600)) if [[ \$num -gt 1 ]]; then delta1=\$((\${tm[1]} * 60)) (( delta += \$delta1 )) if [[ \$num -gt 2 ]]; then (( delta += \${tm[2]} )) fi fi echo \$delta } get_time_diff() { local cur_time=\$(date +%s) echo \$((\$cur_time - \$1)) } print_time_diff() { local delta=\$(get_time_diff \$1) local sec=\$((\$delta % 60)) let "amin = \$delta / 60" let "hour = \$amin / 60" local min=\$((\$amin%60)) if [ -n "\$2" ]; then printf " Running time: %02d:%02d:%02d\\n" \$hour \$min \$sec >> \$2 else printf " Running time: %02d:%02d:%02d\\n" \$hour \$min \$sec fi } log_extra() { echo "---------------- ZPOOL LIST ------------------" >> \$1 zpool list >> \$1 echo "---------------- ZFS LIST ------------------" >> \$1 zfs list >> \$1 echo "---------------- PS AX ------------------" >> \$1 ps ax >> \$1 echo "---------------- TOP -n 10 ------------------" >> \$1 top -n 10 >> \$1 } i=1 mode=0 TOTALLOG="/var/tmp/stabzfs.\$(date +%F-%T).txt" dsk1=\$1 shift dsk2=\$1 shift dsk3=\$1 shift echo "============ ZFS Stability test started at \$(date +%F-%T) ==============" > \${TOTALLOG} if [[ \$# < 2 ]]; then echo "Missing parameters in the command" | /usr/bin/tee -a \${TOTALLOG} exit 1 fi case "\$1" in -i) mode=1 # number of iterations is provided maxiter=\$2 echo "Stability Test : launched for \$maxiter iterations at \$(date)." | /usr/bin/tee -a \${TOTALLOG} ;; -d) mode=2 # duration of tests is provided delta=\$(get_duration \$2) echo "Stability Test : launched for \$2 interval (\$delta seconds) at \$(date)." | /usr/bin/tee -a \${TOTALLOG} ;; -t) mode=3 # stop date/time is provided stopdt=\$2 ;; *) echo "Stability Test : \$1 is a wrong option" | /usr/bin/tee -a \${TOTALLOG} echo "Usage : stab_zfs.sh <disk1> <disk2> <disk3> (-i <iterations> | -t <HH:MM[:SS]> | -d <HH:MM[:SS] [DAY-MONTH-YEAR]>]) [-s | <test name>]" exit 1 ;; esac shift shift if [[ \$mode -eq 3 ]]; then # stop time/date mode if [[ \$# > 0 ]]; then date -d \$1 +%s stopat=\$? if [[ \$stopat -eq 0 ]]; then # stop date is entered after the time # if it is ommited then date is treated as current one stopdt="\$stopdt \$1" shift fi fi echo "Stability Test : launched until \$stopdt at \$(date)." | /usr/bin/tee -a \${TOTALLOG} stopat=\$(date -d "\$stopdt" "+%s") fi GLOB_START_TIME=\$(date +%s) while [[ \$mode -gt 0 ]] do case "\$mode" in 1) # number of iterations is provided if [[ \$i -gt \$maxiter ]]; then uname -a | /usr/bin/tee -a \${TOTALLOG} diskinfo >> null diskinfo >> null echo "---------------- DISKINFO -----------------------" >> \${TOTALLOG} diskinfo | /usr/bin/tee -a \${TOTALLOG} GLOB_START_TIME=\$(date +%s) while [[ \$mode -gt 0 ]] do case "\$mode" in 1) # number of iterations is provided if [[ \$i -gt \$maxiter ]]; then break fi ;; 2) # duration of tests is provided difftm=\$(get_time_diff \$GLOB_START_TIME) if [[ \$difftm -gt \$delta ]]; then break fi ;; 3) # stop date/time is provided tmpat=\$(date +%s) if [[ \$stopat -le \$tmpat ]]; then break fi ;; *) break ;; esac echo "----------------------- Pass \${i} : started \$(date)" | /usr/bin/tee -a \${TOTALLOG} echo "---------------- BEADM LIST -----------------------" >> \${TOTALLOG} ;; beadm list *) break | /usr/bin/tee -a \${TOTALLOG} ;; esac echo "echo "---------------- ZPOOL LIST -----------------------" Pass>> \${iTOTALLOG} : started \$(date)"zpool list | /usr/bin/tee -a \${TOTALLOG} START_TIME=\$(date +%s) ./z.sh \$dsk1 \$dsk2 \$dsk3 print_time_diff \${START_TIME} \${TOTALLOG} echo "----------------------- Pass \${i} : finished \$(date)" | /usr/bin/tee -a \${TOTALLOG} (( i++ )) done echo "Tests are finished successfully at \$(date) with \${i} passes." >> \${TOTALLOG} print_time_diff \${GLOB_START_TIME} | /usr/bin/tee -a \${TOTALLOG} EOT sed -i '/./!d' stab_zfs.sh && chmod 777 stab_zfs.sh |
...