我想创建一个脚本,在知道我的机器已经打开至少7小时之后,它会做一些事情。
这可能吗?是否有系统变量或类似的东西向我显示上次打开机器的时间?
答案 0 :(得分:3)
您可以解析uptime
的输出。
答案 1 :(得分:3)
以下命令放在/etc/rc.local
:
echo 'touch /tmp/test' | at -t $(date -d "+7 hours" +%m%d%H%M)
将创建一个在七小时内运行touch /tmp/test
的作业。
为防止频繁重新启动并阻止添加多个作业,您可以专门为此类作业使用一个at
队列(例如c
队列)。将-q c
添加到at
参数列表会将作业放入c
队列。在添加新作业之前,您可以从c
队列中删除所有作业:
for job in $(atq -q c | sed 's/[ \t].*//'); do atrm $job; done
答案 2 :(得分:2)
正如Pavel和thkala指出的那样,这不是一个强有力的解决方案。看他们的评论!
uptime命令显示系统运行了多长时间。
要完成任务,您可以创建一个首先执行sleep 25200
(25200秒= 7小时)的脚本,然后执行一些有用的操作。让此脚本在启动时运行,例如将其添加到/etc/rc.local。这比轮询正常运行时间命令更好的想法,看看机器是否已经运行了7个小时(这与一辆汽车后座上的小孩相比“我们还在那里吗?”: - )
答案 3 :(得分:1)
等待正常运行时间等于七个小时。
答案 4 :(得分:1)
我不知道这是否是你要找的,但uptime
命令会告诉你自上次重启以来有多少台计算机正在运行。
答案 5 :(得分:1)
$ cut -d ' ' -f 1 </proc/uptime
这将以浮点格式为您提供当前系统的正常运行时间。
以下内容可用于bash脚本:
if [[ "$(cut -d . -f 1 </proc/uptime)" -gt "$(($HOURS * 3600))" ]]; then
...
fi
答案 6 :(得分:1)
将以下内容添加到您的crontab:
@reboot sleep 7h; /path/to/job
/ etc / crontab,/ etc / cron.d /或你的用户crontab,取决于你是想以root用户还是用户来运行它 - 不要忘记在“@reboot”之后输入“root” “如果你把它放在/ etc / crontab或cron.d
中这样做的好处是,如果您多次重启,则关闭时作业会被取消,因此如果您在7小时内重启多次,则不会将其中一堆堆叠起来。 “@reboot”时间规范会在系统重新启动时触发作业运行一次。 “睡7小时;”在运行“/ path / to / job”之前等待7个小时。