【问题标题】:Compare A Variable Regularaly Using Linux Scripts and Cron使用 Linux 脚本和 Cron 定期比较变量
【发布时间】:2017-12-04 14:30:59
【问题描述】:

我正在尝试检查一个数字是否与上次检查时的不同,在这种情况下,每分钟检查一个数字,使用 Linux 脚本和 cron。

例如:

newNum = getNum()

if oldNum != newNum: run some code

oldNum = newNum

(repeat every minute using crontab)

但我遇到的问题是脚本之间无法访问变量,并且使用源(例如 source script.sh)再次运行脚本,因此获得最新版本,而不是一分钟前的版本。

我最好的方法是运行第一个获取当前数字的脚本,然后休眠一分钟,然后运行第二个脚本,它基本上是上面代码的前两行。

例如:

oldNum = getNum()

sleep 60

export oldNum

script2.sh 

这对我来说似乎效率低下,如果可能的话,我想知道是否有更好的解决方案。

【问题讨论】:

  • 另一个潜在的问题是cron 只将事情安排为一分钟的分辨率,所以如果你告诉它每分钟运行一次,我认为这可能会导致问题。

标签: linux shell cron global-variables instance-variables


【解决方案1】:

您可以将之前的号码缓存在一个文件中:

number_cache=/path/to/cache_file

# read the previous number
oldNum=$(< "$number_cache" )
# acquire the new number
newNum=$(getNum)

if [[ "$oldNum" -eq "$newNum" ]]; then
    do_something
fi

# cache the new number
printf "%d\n" "$newNum" > "$number_cache"

【讨论】:

  • 请注意,sh 和 bash 不能进行浮点运算/比较。 ksh 可以。我认为 zsh 也可以。
猜你喜欢
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 2011-04-21
  • 2021-05-08
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2013-07-12
相关资源
最近更新 更多