我需要在正常运行时间 >= 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