Linux (SOL) 循环到第二天
Linux (SOL) loop until next day
我在夜间脚本中遇到循环问题。
所以我得到了一个大脚本,什么 运行 所有基地的夜间转储,然后开始一些任务,需要在第二天开始,因为他们正在比较基地中的信息并对其进行一些更改.
该脚本从 00:35 开始,需要在第二天 6:00 之前结束。但是基地越来越大,只有一个及时结束它的理由——比现在更早地开始倾销基地。
所以我做了一些改进,我在互联网上找到并在脚本中添加了一个循环来检查新的一天是否开始:
while [ $(date "+%H") -ge 21 ]; do
echo "`date` - NOT OK" >> /tfiles/Log/logtest.txt
sleep 120
done
echo "`date` - OK" >> /tfiles/Log/logtest.txt
问题是 - 如果碱基倾倒时间足够长以达到第二天,这个循环是否有效。我的意思是 - 如果我们在 21:00 开始这个脚本,转储在 00:10 结束,然后循环检查今天是哪一天,然后开始等到第二天。
还有一个问题,我没找到,选项-ge 21是什么意思?
总结脚本如下:
开始于 21:00
转储
循环检查是否到第二天
等到第二天
第二天需要开始的工作
脚本结束运行类似于
我并没有真正完全理解这个问题,但至少这部分:
-ge 在 man bash:
中有解释
arg1 OP arg2 OP is one of -eq, -ne, -lt, -le, -gt, or -ge. These
arithmetic binary operators return true if arg1 is equal to, not equal
to, less than, less than or equal to, greater than, or greater than or
equal to arg2, respectively. Arg1 and arg2 may be positive or negative
integers.
你目前的状态是
while [ $(date "+%H") -ge 21 ]
也就是说 "loop this as long as [
(an alias for test
) returns true."
test
使用 -ge
检查左操作数 ($(date "+%H")
) 是否 大于或等于 右操作数 (21)。
date
读取它的参数,"+%H"
,作为一个格式说明符,以 24 小时格式指示输出仅作为小时,所以在晚上 9 点它将报告 21。测试将是真实的,所以它将进入循环,打印到日志文件,然后休眠两分钟。晚上 10 点是 22 点,晚上 11 点是 23 点,所以到午夜应该没问题。
午夜时分,小时变为 00,因此测试失败,循环中断。
我想你真正想要的是 crontab
entry that defined the required behavior - c.f. the manual.
我在夜间脚本中遇到循环问题。 所以我得到了一个大脚本,什么 运行 所有基地的夜间转储,然后开始一些任务,需要在第二天开始,因为他们正在比较基地中的信息并对其进行一些更改. 该脚本从 00:35 开始,需要在第二天 6:00 之前结束。但是基地越来越大,只有一个及时结束它的理由——比现在更早地开始倾销基地。 所以我做了一些改进,我在互联网上找到并在脚本中添加了一个循环来检查新的一天是否开始:
while [ $(date "+%H") -ge 21 ]; do
echo "`date` - NOT OK" >> /tfiles/Log/logtest.txt
sleep 120
done
echo "`date` - OK" >> /tfiles/Log/logtest.txt
问题是 - 如果碱基倾倒时间足够长以达到第二天,这个循环是否有效。我的意思是 - 如果我们在 21:00 开始这个脚本,转储在 00:10 结束,然后循环检查今天是哪一天,然后开始等到第二天。
还有一个问题,我没找到,选项-ge 21是什么意思?
总结脚本如下:
开始于 21:00
转储
循环检查是否到第二天
等到第二天
第二天需要开始的工作
脚本结束运行类似于
我并没有真正完全理解这个问题,但至少这部分:
-ge 在 man bash:
中有解释arg1 OP arg2 OP is one of -eq, -ne, -lt, -le, -gt, or -ge. These arithmetic binary operators return true if arg1 is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to arg2, respectively. Arg1 and arg2 may be positive or negative integers.
你目前的状态是
while [ $(date "+%H") -ge 21 ]
也就是说 "loop this as long as [
(an alias for test
) returns true."
test
使用 -ge
检查左操作数 ($(date "+%H")
) 是否 大于或等于 右操作数 (21)。
date
读取它的参数,"+%H"
,作为一个格式说明符,以 24 小时格式指示输出仅作为小时,所以在晚上 9 点它将报告 21。测试将是真实的,所以它将进入循环,打印到日志文件,然后休眠两分钟。晚上 10 点是 22 点,晚上 11 点是 23 点,所以到午夜应该没问题。
午夜时分,小时变为 00,因此测试失败,循环中断。
我想你真正想要的是 crontab
entry that defined the required behavior - c.f. the manual.