我需要创建一个每天执行的脚本(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)
预先感谢您的任何帮助!
我会在 AWK 中完成整个测试:
\nawk \'$1 > (72 * 3600) { print "yes" }\' /proc/uptime\n
Run Code Online (Sandbox Code Playgroud)\n如果您想将其用作测试,请使用退出代码:
\nif 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 表示成功作为退出代码,因此我们反转条件。
如果您\xe2\x80\x99正在使用systemd,另一种方法是使用systemd计时器(有关详细信息,OnBootSec=72h
请参阅FelixJN\xe2\x80\x99s答案)。
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)