当正常运行时间 >= 20 分钟时运行命令

当正常运行时间 >= 20 分钟时运行命令

我需要在正常运行时间 >= 20 分钟时运行 BASH 脚本(例如)。我该怎么做?

请帮我创建脚本来检查系统正常运行时间,并检查正常运行时间是否超过 20 分钟 - 运行另一个脚本。

谢谢。

答案1

无需知道 20 分钟何时过去。可以使用命令“at”来告诉系统从某个时刻起 20 分钟内执行某项操作(该时刻可以是(重新)启动)。

输入并使其可执行。将 {user} 更改为用户名或“root” /etc/crontab@reboot {user} /usr/local/bin/script.sh/usr/local/bin/script.sh

创建/usr/local/bin/script.sh并将其放入其中...

 at -f /usr/local/bin/script2.sh now + 20 minutes

/usr/local/bin/script2.sh将在(重新)启动后 20 分钟执行。实际时间范围可能会略有不同(因为在执行“crontab”之前,启动过程可能已经进行了)。这只是一个示例,但这是创建此类事件的通用方法。

/usr/local/bin/script2.sh可以用来添加更多具有类似起点的线路(从重启开始 40 分钟等)

重启后仍可继续运行!因此 20 分钟内重启 5 次 = 执行 5 次。嗯... 不过还是把它留在这里。


另一种方法:

如果您需要从脚本本身执行此操作,您也可以创建一个变量包含在脚本中。第一个简单例子:

$uptime
 16:11:31 up 1 day,  7:35,  2 users,  load average: 0,10, 0,07, 0,06
~/tmp$ more test
uptime
~/tmp$ more test2
minutes=20;
at -f test now + $minutes minutes

执行后./test2会显示

warning: commands will be executed using /bin/sh
job 7 at Tue Oct 20 16:29:00 2015

现在您需要做的就是将“分钟”更改为基于“正常运行时间”等的变量。

这是一个获取变量“minutes”中正常运行时间(以分钟为单位)的示例:

 minutes=`awk '{print $0/60;}' /proc/uptime`;

这是一种使其具有条件的方法:

#!/bin/bash
minutes=`awk '{print $0/60;}' /proc/uptime`;
if [ $(echo "$minutes > 20" | bc) -ne 0  ]
then
  at -f test now + 20 minutes
fi
  • 如果分钟数大于 20,则从现在起 20 分钟后执行脚本。

使用纯 bash:

#!/bin/bash
read -d. seconds < /proc/uptime
if (( $seconds > 20*60 ))
then
  at -f test now + 20 minutes
fi

这应该可以帮助你入门。

答案2

要在启动后 20 分钟内运行脚本,请输入/etc/rc.local

nohup your-script >/dev/null 2>&1 &

脚本开头的your-script位置。sleep 1200

或者创建一个upstart作业或指定 @reboot cron 命令或配置“启动应用程序”等,具体取决于您最合适的情况,请参阅如何在启动时运行脚本?


如果正常运行时间超过 20 分钟则运行一个脚本,否则运行另一个脚本,在 bash 中:

read -d. uptime < /proc/uptime
if (( uptime > 1200 ))
then
   one_script
else
   another_script
fi

相关内容