移動硬盤的防卡保護腳本

要往一個Portable SSD上不停寫入,在這個過程中,已經遇到過幾次移動硬盤卡死。因爲沒有及時發現,一般都已經卡死了很久了。

症狀:對應在移動硬盤上的進程%CPU一直在90%以上。

一般處理手法:強制Eject

爲了保護一下ssd 的壽命於是,

k=0
MEGA=10
urgent=850
breaking=60
while true; do
#第一步得到相關的命令的各資源佔用
    OUTPUT=`ps aux|head -1;ps aux|grep "some_command"`
    DUTPUT=`echo "${OUTPUT}" |grep -v 'grep'` #grep 本身這一條要去掉
    #echo "$DUTPUT"
#第二步得到他的CPU佔用
    array_all=(${DUTPUT/\t/})
    CPU_SIGN=`echo "${array_all[13]}"`
#第三步把得到的CPU_SIGN放大十倍,注意這裏得到的CPU_SIGN其實是個字符串,要變成小數
    CPU_SIGN=$(awk '{print $1*$2}' <<<"${CPU_SIGN} ${MEGA}")
    #$(這個是爲了恢復vim正常的語法高亮,可忽略
    #echo "$CPU_SIGN"
#如果沒事,就break
    if [ $CPU_SIGN -lt $urgent ]; then
        break
    fi
#如果可能有事....
    k=$[k+1]
#確定有事,於是第四步找出移動硬盤上的在運行的bash窗口
    if [ $k -gt $breaking ]; then
        CMD_OUT=$(diskutil unmountDisk /dev/disk2 2>&1 )  #抓住unmount的錯誤輸出
        CMD_PUT=`echo "${CMD_OUT}" |grep 'PPID'` #PPID取巧拿法
        PPID_NUM=`echo "${CMD_PUT}" | egrep -o -E  '[0-9]+'`
        #echo $PPID_NUM
#第五步幹掉爺爺進程,然後unmount
        kill $PPID_NUM
        sleep 2
        diskutil unmountDisk /dev/disk2
        break
    fi
    sleep 5
done

最後,做成一個30分鐘啓動一下的定時任務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章