Linux中是否有一个变量向我显示上次打开机器的时间?

时间:2010-11-16 13:38:34

标签: linux unix cron

我想创建一个脚本,在知道我的机器已经打开至少7小时之后,它会做一些事情。

这可能吗?是否有系统变量或类似的东西向我显示上次打开机器的时间?

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)

等待正常运行时间等于七个小时。

http://linux.die.net/man/1/uptime

答案 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个小时。