Bash

如何檢查正常執行時間是否大於 72 小時?

  • September 15, 2021

我需要創建一個每天執行的腳本(cron 作業),計算系統的正常執行時間,如果該數字大於 72 小時,則重新啟動系統。

我在將小時值轉換為我可以與 72 比較的值時迷失了方向。它返回給我6499.04: command not found

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

預先感謝您的任何幫助!

我會在 AWK 中進行整個測試:

awk '$1 > (72 * 3600) { print "yes" }' /proc/uptime

如果要將其用作測試,請使用退出程式碼:

if awk '{ exit ($1 < (72 * 3600)) }' /proc/uptime; then
   echo Need to reboot
fi

如果比較失敗, AWK 評估($1 < (72 * 3600))為 0,否則為 1;0 表示成功作為退出程式碼,因此我們反轉條件。

如果您使用的是 systemd,另一種方法是使用 systemd 計時器OnBootSec=72h(有關詳細資訊,請參閱FelixJN 的答案)。

一個 systemd 計時器也可以工作:

[Unit]
Description=reboot after 72h

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

[Install]
WantedBy=multi-user.target

請注意,這不是服務,而是計時器,即文件名必須以.timer. 將其放入 eg 中/etc/systemd/system/reboot27h.timer,然後像往常一樣為目前會話啟用並啟動它:

systemctl enable reboot72h.timer
systemctl start reboot72h.timer

要檢查計時器是否正常工作以及距離下一次執行還有多少時間,請使用

systemctl list-timers

引用自:https://unix.stackexchange.com/questions/668902