システムを一時的に一時停止して再開するには?

システムを一時的に一時停止して再開するには?

平日の勤務時間にのみ必要なLinuxサーバーがあります。常にオンにすることは意味がありません。

監督なしで設定された日時でLinuxシステムを一時停止して再開するには?

答え1

これを行うには、systemctl suspendコマンドrtcwakeを使用して電源を管理するシェルスクリプトを作成しました。

実行するとループ(15分ループ)として機能します。

  • 今日がどんな曜日かを確認し、

  • いつ起きるかを決める

  • すぐに一時停止する必要があることを確認してください。

#!/bin/bash

while [ 1=1 ]; do # repeat forever

        clear

        echo "Updated: $(date '+%F %T')"

        echo "### TIME SECTION"

        SLEEP_H=18 # What hour should the system suspend at?
        WAKE_H=8 # What hour should the system wake up at?

        # check what day of the week it is now
        DOW=$(date +%w) #  1 = monday, 5 = friday etc.

        echo "Day of week: $DOW"

        # check what time is it now
        H=$(date +%H)
        M=$(date +%M)

        NOW_S=$(date +%s)

        echo "Hour: $H, minute: $M"

        #date +%s --date "tomorrow 8:00"

        if [[ $DOW -lt 5 ]]; then
                echo "It's Monday to Thursday!"
                WAKE="tomorrow $WAKE_H:00"
        else
                echo "It's Friday to Sunday!"
                WAKE="monday $WAKE_H:00"
        fi

        WAKE_S="$(date --date "$WAKE" +%s)"

        WAKE_SR=$(( $WAKE_S - $NOW_S))

        echo
        echo "Wake: $WAKE"
        echo "Wake relative seconds: $WAKE_SR"
        echo
        rtcwake -m no -s "$WAKE_SR"

        # sleep section

        sleep 15m

        echo "### SLEEP SECTION"

        if [[ $H -gt $SLEEP_H ]]; then # sleep if the hour is right
                systemctl suspend
                continue
        else
                echo "It's too early to sleep"
        fi

        if [[ $DOW -gt 5 ]]; then # sleep if it's saturday or sunday
                systemctl suspend
                continue
        else
                echo "It's not weekend - gotta stay up!"
        fi

done

スクリプトは、システムが月曜日から金曜日まで午前8時に目覚め、午後6時に省電力モードに切り替えるように設定されています。

週末と夜は眠ります。必要に応じて自由に修正してください。

このスクリプトをに保存しました/root/power-schedule.sh。実行可能であることを確認してください: `sudo chmod +x /root/power-schedule.sh'

@rebootまた、突然の停電によってスケジュールが中断されないように、スクリプトを時間とともにcrontabに配置してください。

ランニング:

sudo crontab -e

そして次の行を追加してください:

@reboot         exec /root/power-schedule.sh

AC電源が検出されたら、システムの電源を入れるようにUEFI / BIOSを設定することもできます。これにより、電源が切れた後に起動が発生します(通常はデフォルトの動作であるオフ状態を維持する代わりに)。

答え2

短い冗談:

rtcwake -m mem -s $(($(date --date "20:30" +%s) - $(date +%s)))

ネットワーク共有がマウントされている場合やトラフィックが検出されたときにネットワークが起動した場合は機能しません。

Wake on LANを無効にする:

ethtool -s eno1 wol d

または単に「Magic Packet」に委任してください。

ethtool -s eno1 wol m

ネットワーク共有を削除するには:

sudo fuser /mount/share

これらのプロセスを終了/終了し、共有または必要に応じumountumount -f -l

時にはタイムアウトが発生するのに時間がかかるため、次の方がうまく機能します。

while sleep 1; do rtcwake -m mem -s $(($(date --date "20:30" +%s) - $(date +%s))) && break; done 

20:30交換することもできますtomorrow 9:00。時間を見直しても心配しないでください。rtcwakeシステムクロックがそうであればそうなりますUTC

関連情報