在bash中按给定时间间隔重新执行命令

时间:2016-02-20 14:40:41

标签: linux bash counter increment

有没有办法在bash中按给定的时间间隔重新执行命令? 我希望天气每30分钟重新执行一次。 这是我的脚本的例子:

#!/bin/bash

#Show time, date and clickable calendar
clock() {
    curtime=`date '+%I:%M'` 
    curdate=`date '+%d-%m-%Y'`
    echo "%{A:/usr/bin/gsimplecal:}%{T2} %{T1}$curdate%{A} %{T2} %{T1}$curtime"
}


volume1() {
    amixer get Master | sed -n 'N;s/^.*\[\([0-9]\+%\).*$/\1/p'
 }

#weather
weather(){
  curl -s "$(curl -s 'http://www.wunderground.com/' | sed -n '/Full Forecast/{s#[^"]*"\([^"]*\)".*#http://www.wunderground.com\1#p}')" | sed -n '/"curCond"/{ s#.*wx-value[^>]*>\([^<]*\)<.*#\1#; h }; /"curTemp"/{ N; N; N; s#.*wx-value[^>]*>\([^<]*\)<.*wx-unit[^>]*>&deg;\(.\).*#\1°\2 #; G; s#\n##; p }'
    echo $weather
    }

while :; do

echo "%{B#DDecf0f1}%{F#2c2c2c}%{T2}%{l}    $(groups)    %{T1}$(curwin) %{r}%{F#2C2C2C}  $(weather) $(space)|$(space) VOL: $(volume1) $(space)|$(space) $(uptime)  $(space)|$(space)   $(clock) %{A2}$(curwin)"

sleep 1 #sleep of mainloop

done

1 个答案:

答案 0 :(得分:1)

我建议您使用 cron 定期运行脚本。

如果您只想从脚本运行特定功能(例如weather()),请在脚本中添加一个switch语句,在该脚本中您将检查是否提供了某个选项,例如{{ 1}}用于执行-w函数。

当您将 crontab 编辑为每30分钟运行一次(即weather())时,请为您的脚本提供0,30 * * * * my_script,以便仅执行-w - {{ 1}}