Pet*_*ikh 1 bash scripts uptime
我需要在正常运行时间 >= 20 分钟(例如)时运行 BASH 脚本。我该怎么做?
请帮我创建脚本以检查系统正常运行时间并检查正常运行时间是否超过 20 分钟 - 运行另一个脚本。
谢谢。
Rin*_*ind 10
无需知道 20 分钟何时过去。命令“at”可用于告诉系统在某个时刻(并且该时刻可以是(重新)启动)后的 20 分钟内执行某些操作。
在/etc/crontab放@reboot {user} /usr/local/bin/script.sh,使/usr/local/bin/script.sh可执行文件。将 {user} 更改为用户名或“root.user”。
创建/usr/local/bin/script.sh,当你把它放进去......
at -f /usr/local/bin/script2.sh now + 20 minutes
Run Code Online (Sandbox Code Playgroud)
/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
Run Code Online (Sandbox Code Playgroud)
执行./test2将显示
warning: commands will be executed using /bin/sh
job 7 at Tue Oct 20 16:29:00 2015
Run Code Online (Sandbox Code Playgroud)
现在您需要做的就是将“分钟”更改为基于例如“正常运行时间”的变量。
这是在变量“minutes”中获取以分钟为单位的正常运行时间的示例:
minutes=`awk '{print $0/60;}' /proc/uptime`;
Run Code Online (Sandbox Code Playgroud)
这是一种使其成为条件的方法:
#!/bin/bash
minutes=`awk '{print $0/60;}' /proc/uptime`;
if [ $(echo "$minutes > 20" | bc) -ne 0 ]
then
at -f test now + 20 minutes
fi
Run Code Online (Sandbox Code Playgroud)
使用纯 bash:
#!/bin/bash
read -d. seconds < /proc/uptime
if (( $seconds > 20*60 ))
then
at -f test now + 20 minutes
fi
Run Code Online (Sandbox Code Playgroud)
这应该让你开始。