shutdown -r +${MINUTES}の最大値を計算するには?

shutdown -r +${MINUTES}の最大値を計算するには?

私はCentOS 7.5.1804およびGNU bashバージョン4.2.46(2)リリース(x86_64-redhat-linux-gnu)を使用しています。

メンテナンス期間中にスケジュールされた再起動の場合、これから次の再起動までの時間(分)を計算します。たとえば、約3ヶ月後に再起動するには、次のようにします。

shutdown -r +129600

bashをよりよく理解したいのですが、最も高い値が何であるか、どのように計算するのか疑問に思います。

int32 を使用した計画終了が報告されます。

shutdown -r +4294967295
Shutdown scheduled for Tue 10184-07-27 ... 

より高い値も可能ですが、可能な最大値はどのように計算しますか?

答え1

私のコンピュータでは、/sbin/shutdownは/sbin/systemctlへのシンボリックリンクです。
systemctlソースからナビゲートします(https://code.launchpad.net/~ubuntu-branches/ubuntu/trusty/systemd/trusty)、わかります

  • これshutdown_parse_argvこの関数は、時間指定を次arg_whenの型の変数に解析します。usec_t
  • これsend_shutdowndこの関数はsd_shutdown_commandusec_t 値を使用して構造を生成します。
  • これsd_shutdown_command構造には以下が含まれます。

    /* Microseconds after the epoch 1970 UTC */
    uint64_t usec;
    

したがって、最も長い時間は次のようになります。

$ \bc <<< '(2^63-1) / 10^6 / 60' # minutes
153722867280
$ \bc <<< '(2^63-1) / 10^6 / 60 / 24 / 365' # years
17548272

そういえばまた読まなかったですね。parse_time_spec引数が実際に時間値でどのように解決されるかを確認する関数です。

関連情報