Как заставить систему приостанавливаться и возобновлять работу по расписанию?

Хорошо, если имена файлов встречаются в совпадающих парах, вы можете использовать следующее:

for f in words/*/*1.txt ; do awk -f corpus_vs_flexion.awk "$f" "${f%1.txt}2.txt" ; done

"$ {f% 1.txt} 2.txt " фраза говорит:" используйте имя файла "$ f" , но удалите окончание 1.txt и добавьте вместо него окончание 2.txt ".

2
20.05.2019, 10:52
2 ответа

Для этой цели я создал сценарий оболочки, используя команды 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:00 и засыпание в 18:00.

Он будет спать по выходным и по ночам. Не стесняйтесь изменять его в соответствии с вашими потребностями.

Я храню этот скрипт в /root/power-schedule.sh. Убедитесь, что он исполняемый:`sudo chmod +x /root/power -schedule.sh'

Также поместите скрипт в crontab со временем @reboot, чтобы убедиться, что внезапное отключение электроэнергии не нарушит ваше расписание.

Выполнить:

sudo crontab -e

И добавьте эту строку:

@reboot         exec /root/power-schedule.sh

Вы также можете настроить UEFI/BIOS таким образом, чтобы машина включалась при обнаружении питания переменного тока -это заставит ее загружаться после отключения питания (вместо того, чтобы оставаться выключенной -, что обычно это поведение по умолчанию ).

6
27.01.2020, 21:58

Один вкладыш:

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

Это не сработает, если у вас подключены общие сетевые ресурсы или ваша сеть просыпается при обнаружении трафика.

Отключить пробуждение по локальной сети:

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.

0
17.11.2021, 20:33

Теги

Похожие вопросы