稼働時間を利用してアクションをトリガーするにはどうすればよいでしょうか?

稼働時間を利用してアクションをトリガーするにはどうすればよいでしょうか?

x 日後に通知を受け取るシェルまたは Perl コードを書きたいです。基本的に、SUSE Linux サーバーでは、208 日後に再起動が必要で、そうしないとシステムがフリーズします。これは既知のバグです。したがって、これを回避するには、8 日前などに通知メールが届くようにしたいです...単なる警告です。

スクリプトは現在の稼働時間をチェックし、合計 208 日間に必要な残りの日数を計算する必要があります。これが意味をなすといいのですが。

答え1

awk を使用すると、稼働時間を日単位で簡単に判断できます。

# Print days of uptime, or zero if less than 1 day.
uptime | awk '/days?/ {print $3; next}; {print 0}'

これをコマンド置換と組み合わせて使用​​すると、結果に基づいて任意のアクションを実行できます。例:

#!/bin/bash
days () { uptime | awk '/days?/ {print $3; next}; {print 0}'; }
UPTIME_THRESHOLD=200
if [ $(days) -ge $UPTIME_THRESHOLD ]; then
    : # Take some action.
fi

もちろん、あなたが取る行動はあなた次第です。自分自身にメッセージを送ったり、再起動をスケジュールしたりすることができます。命令、または他に必要と思われることを実行します。

このスクリプトを毎日の cron ジョブとして設定して、アップタイムしきい値を超えたときに定義したアクションをトリガーすることもできます。ルートアクセス権がある場合は、スクリプトを にドロップする/etc/cron.daily/か、個人の crontab を設定してこのスクリプトを 1 日に 1 回呼び出すこともできます。

答え2

CodeGnome の回答に触発されて、Mac 用の小さなスクリプトを作成しました。このスクリプトでは、コンピューターが 8:30 オンになった後に通知が表示されます。また、これを 1 分ごとに実行するように cron を構成する必要がありました。

#!/bin/bash
timeup () { uptime | awk  '{print $3}'; }
UPTIME="8:30,"
if [ $(timeup) == $UPTIME ]; then
    osascript -e 'tell app "Finder" to display dialog "8:30 uptime! Go Home!"' &
    osascript -e 'display notification "8:30 uptime! Go Home!" with title "Go Home!!"' &
fi

関連情報