시스템을 제 시간에 일시 중지하고 재개하는 방법은 무엇입니까?

시스템을 제 시간에 일시 중지하고 재개하는 방법은 무엇입니까?

평일 근무 시간에만 필요한 Linux 서버가 있습니다. 항상 켜두는 것은 의미가 없습니다.

감독 없이 설정된 시간과 날짜에 Linux 시스템을 일시 중지하고 재개하는 방법은 무엇입니까?

답변1

이를 위해 systemctl suspendrtcwake명령을 사용하여 전원을 관리하는 쉘 스크립트를 만들었습니다.

실행하면 루프(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

이러한 프로세스를 종료/종료한 다음 umount공유하거나 umount -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.

관련 정보