如何检查正常运行时间是否大于72小时?

Dyn*_*yes 1 bash awk uptime

我需要创建一个每天执行的脚本(cron 作业),计算系统的正常运行时间,如果该数字大于 72 小时,则重新启动系统。

我在将小时值转换为可以与 72 进行比较的过程中迷失了方向。它让我回归6499.04: command not found

#!/bin/bash
if $(awk '{print $1}' /proc/uptime) / 3600 > 72 ; then
    echo "yes"                                                                                                                                                                        
fi
Run Code Online (Sandbox Code Playgroud)

预先感谢您的任何帮助!

Ste*_*itt 7

我会在 AWK 中完成整个测试:

\n
awk \'$1 > (72 * 3600) { print "yes" }\' /proc/uptime\n
Run Code Online (Sandbox Code Playgroud)\n

如果您想将其用作测试,请使用退出代码:

\n
if awk \'{ exit ($1 < (72 * 3600)) }\' /proc/uptime; then\n    echo Need to reboot\nfi\n
Run Code Online (Sandbox Code Playgroud)\n

($1 < (72 * 3600))如果比较失败,AWK 计算结果为 0,否则计算结果为 1;0 表示成功作为退出代码,因此我们反转条件。

\n

如果您\xe2\x80\x99正在使用systemd,另一种方法是使用systemd计时器(有关详细信息,OnBootSec=72h请参阅FelixJN\xe2\x80\x99s答案)。

\n


Fel*_*xJN 6

systemd 计时器也可以工作:

[Unit]
Description=reboot after 72h
 
[Timer]
Unit=systemd-reboot.service
OnBootSec=72h

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

请注意,这不是一个服务,而是一个计时器,即文件名必须以.timer. 将其放入 eg 中/etc/systemd/system/reboot27h.timer,然后像往常一样在当前会话中启用并启动它:

systemctl enable reboot72h.timer
systemctl start reboot72h.timer
Run Code Online (Sandbox Code Playgroud)

要检查计时器是否正常工作以及距离下一次运行还剩多少时间,请使用

systemctl list-timers
Run Code Online (Sandbox Code Playgroud)