2015-05-14 38 views
1

我有一個腳本會在使用太多內存時發出嘟嘟聲。我想將此腳本部署到遠程計算機並通過SSH運行。不幸的是,它使遠程計算機發出嘟嘟聲,而不是我的。有沒有辦法解決?當我通過SSH在遠程計算機上運行bash腳本時,如何在本地計算機上觸發聲音?

#!/bin/bash 
# Peter Black 
# alarm.sh 
max_percent=94 
sleeper=1 
frequency=1000 
duration=300 

# To enable the script: 
# chmod u+x alert.sh 

# get the total available memory: 
function total_memory { 
    echo "Total memory available: " 
    TOTAL_MEM=$(grep MemTotal /proc/meminfo | awk '{print $2}') 
    #Another way of doing that: 
    #total_mem=$(awk '/MemTotal/ {print $2}' /proc/meminfo) 
    echo "---------- $TOTAL_MEM ---------------" 
} 


# alarm function params: frequency, duration 
# Example: 
# _alarm 400 200 
_alarm() { 
    (\speaker-test --frequency $1 --test sine)& 
    pid=$! 
    \sleep 0.${2}s 
    \kill -9 $pid 
} 

function total_available_memory { 
    total_available_mem=$(</proc/meminfo grep MemTotal | grep -Eo '[0-9]+') 
    total_free_mem=$(</proc/meminfo grep MemFree | grep -Eo '[0-9]+') 
    total_used_mem=$((total_available_mem - total_free_mem)) 
    #percent_used=$((total_available_mem/total_free_mem)) 
    # print the free memory 
    # customize the unit based on the format of your /proc/meminfo 
    percent_used=$(printf '%i %i' $total_used_mem $total_available_mem | awk '{ pc=100*$1/$2; i=int(pc); print (pc-i<0.5)?i:i+1 }') 

    if [ $percent_used -gt $max_percent ]; then 
     echo "TOO MUCH MEMORY IS BEIGN USED!!!!!!!! KILL IT!" 
     _alarm $frequency $duration 
    fi 

    echo "Available: $total_available_mem kb - Used: $total_used_mem kb - Free: $total_free_mem kb - Percent Used: $percent_used %" 

} 

# RUN THE FUNCTIONS IN AN INFINITE LOOP: 
# total_memory 

echo "Press [CTRL+C] to stop.." 
while : 
do 
    total_available_memory 
    sleep $sleeper 
done 
+1

然後,您必須爲您的機器編寫一個服務器,並讓遠程主機向您發送一些數據,以便服務器可以處理它併發出嘟嘟聲。 – ForceBru

+1

您可以對來自腳本的特定輸出消息作出反應,並觸發本地計算機上的聲音或執行ForceBru建議的操作。 –

+0

我可以編寫一個在本地計算機上運行的腳本,通過SSH連接到遠程計算機並查詢內存? –

回答

0

的是bash,只需打印「鍾」字,而不是幾次使用揚聲器測試程序... echo -e "\007\007\007"這讓當地的聲音,即使在您在遠程計算機上執行腳本。頻率和音量是一個不同的問題...

編輯:更好的是,每個鍾後睡覺,所以你可以聽到它! :)

for i in {0..10} 
do 
    echo -en "\007" 
    sleep 0.5 
done 
+0

不幸的是,命令不會在我的電腦上發出嗶嗶聲... –

+0

您的環境是什麼? – pedwards

+0

ubuntu linux 12 –

0

嗯,有一個非常簡單的方法:

ls -l >/dev/dsp 

:-)

它將引導目錄文字到聲音輸出彷彿這將是一個wav文件。這聽起來不太好:-)但令人震驚的是它很棒。它需要讓內核模塊生成/dev/dsp設備。


或者,您也可以發出蜂鳴聲控制檯的字符終端上,但你需要蜂鳴輸出重定向到的是:

echo -en "\007" >/dev/tty1 

會做你想要什麼。但它需要打開揚聲器和主動控制檯桌面(它的X服務器運行,也許它不會工作)。

相關問題