【问题标题】:Re-execute a command by a given time interval in bash在 bash 中按给定时间间隔重新执行命令
【发布时间】:2016-06-02 04:11:19
【问题描述】:

有没有办法在 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

【问题讨论】:

  • 为什么不使用cronat
  • Cron 会重新执行整个脚本吗?我只想在我的脚本中重新执行“天气”。在什么地方?
  • @LuisVito 请准确显示您希望每 30 分钟执行一次的内容。您是否尝试每 30 分钟执行一次 while 循环,因为目前在您的 echo 语句中的子 shell $() 中的每个函数调用每秒都会执行一次。即使使用伪代码也请澄清。
  • 我想每 30 分钟重新执行一次“天气”功能,让其他一切保持原样。
  • @LuisVito 最简单的,只需通过 cron 每 30 分钟将天气保存到一个文件,一些后台进程,等等......然后从脚本中的文件中读取。或者只是节省时间,检查是否已过 30 分钟,是否显示新天气和更新时间。

标签: linux bash counter increment


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢。我试试这个。
  • @LuisVito 不客气 :-) 请告诉我们它是否适合您!
猜你喜欢
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 2017-02-18
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
相关资源
最近更新 更多