2015-05-14 37 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服务器运行,也许它不会工作)。

相关问题