Да-да, ты не ослышался именно ВКЛЮЧЕНИЕ
Откуда ноги растут
У меня дома стоит небольшой серверок, он очень полезный, работает в качестве vpn, чтобы скорость была побольше, об этом как-нибудь в другой раз. Одна из его проблем, которая жутко нервирует — он шумный. Нужен он только в рабочее время, поэтому по приходу домой я его стараюсь выключать. Сложность выключения в том, что из интерфейсов общения с внешним миром на сервере есть только ssh. Нет, можно, кончено, где-то наковырять отдельную клавиатуру, монитор и по необходимости набирать команду на выключение. Только куда всё это добро я буду ставить это во-вторых, а во-первых, не бюджетненько получается.
Итого мои ежедневные будничные действия имели подобный порядок: по возвращении домой включал ноут, конектился по ssh к серверу и останавливал его. Иногда было лень и вырубал его с кнопки, что в целом не страшно, но внутренний голос каждый раз мне говорил «не надо так». Вот только каждый раз включать ноут, чтобы корректно завершить работу сервера иногда просто лень, у меня бывают периоды когда я все выходные могу не запускать ноутбук вообще. Поэтому пошел читать интернеты как научить ubuntu (на сервере стоит именно она, причем серверная версия без иксов) автоматически саму себя выключать, но это просто, главный вопрос был, как сделать автоматическое включение.
Как решается
Первым что приходит в голову, что можно будить сервер по сети. Вариант интересный, но я заленился и это надо в биос лезть, а у меня дома нет отдельного монитора чтобы посмотреть настройки биоса. Но в конечном итоге всё равно надо будет сделать, чтобы в случае непредвиденного завершения работы можно было без физического доступа разбудить машину. Это как минимум удобно.
Дальнейшее гугление методом нехитрых словесных вариаций выдало мневариант использования утилиты rtcwake. Как понятно из названия это как раз ОНО. Собственно, сама команда имеет нехитрый формат, который в большинстве случаев будет сведен к подобному
#rtcwake -m mem -s 60 // или #rtcwake -m mem -t [unix-timestamp]
Да, команда должна выполняться от root’а, о чем говорит шарп в начале строки.
Ключик -m указывает на тип засыпания системы (так-то в мане всё описано, но вдруг тебя в терминале забанили? А зачем тебе тогда команды для теминала?):
- standby (S1) — режим используется по умолчанию, минимальное энергопотребление быстрый отбой и подъем
- freeze — Процессы заморожены, все устройства приостановлены и процессоры работают на холостом ходу, Говорят потребляет меньше энергии чем mem, но появилось с в ядре с версии 3.9
- mem (S3) — Питание остается только на ОЗУ и инфа на ОЗУ тоже храниться;
- disk (S4) — Всё ОЗУ выгружается на диск (думаю с SSD практически такой же быстрый вариант как и mem);
- off (S5) — Аналогично вызову команды shutdown, и смысл?);
- on — без отключения, используется для отладки.
Очевидно что совсем-совсем выключаться он, конечно, умеет, вот только чтобы проснуться потом надо чтобы где-то было питание, что логично. Он уходит к гибернацию с сохранением некоторых функций, например, пробуждения =)
Про ключики -s и -t, первый указывает количество секунд, через которое система проснется, а вторая указывает временну́ю метку в формате количества секунд с начала эпохи unix. Если надо разбудить систему через 1 час, то используем вариант 1, если надо разбудить в 17:30:23 в среду через неделю, а в калькулятор вы не умеете, то используем второй вариант.
В общем, имеем функцию, которая умеет выключать систему и включать её, мне важнее было чтобы оно включалось =) Теперь идем в наш любимый крон, в режиме суперадминистратора или рута и там добавляем вот такие командочки:
# С понеделькиа по четверг 0 18 * * 1-4 rtcwake -m mem -t $(date -d 'tomorrow 8:30:00' '+%s') # А в пятницу спим до понедельника 0 18 * * 5 rtcwake -m mem -t $(date -d 'next Monday 8:30:00' '+%s')
И собственно всё. Пояснения тут излишни.
Конечно, если включить сервер руками и выключить руками, то, скорее всего, автоматического подъема не произойдет. И в этом случае пробуждение по сети спасет ситуацию. Но если же он будет жить своей самостоятельной взрослой жизнью, и мы не будем лезть к нему со своими советами, то все должно быть хорошо.
Из приколов, видел где-то реализацию, когда комп использовался в качестве будильника: автоматическое включение и запуск аудио плеера. Тоже вариант использования. Если подумать, можно придумать ещё какие-нибудь нетривиальные способы выстрелить себе в ногу через линукс.
Не всегда надо выключать систему иногда её нужно перезагружать по крону. Видишь какой я молодец и про это тоже уже написал =)
Всем рок!
P.S: О! А скоро я тебе расскажу как поднимать VPN сервер при отсутствии статического ip.
Спасибо за статью, но ничего не получилось, при попытке ввести ваш пример
# С понеделькиа по четверг
0 18 * * 1-4 rtcwake -m mem -t $(date -d ‘tomorrow 8:30:00’ ‘+%s’)
# А в пятницу спим до понедельника
0 18 * * 5 rtcwake -m mem -t $(date -d ‘next Monday 8:30:00’ ‘+%s’)
в терминале выдается сообщение:
bjancamio@svelana-lenovo:~$ # С понеделькиа по четверг
bjancamio@svelana-lenovo:~$ 0 18 * * 1-4 rtcwake -m mem -t $(date -d ‘tomorrow 8:30:00’ ‘+%s’)
0: команда не найдена
bjancamio@svelana-lenovo:~$ # А в пятницу спим до понедельника
bjancamio@svelana-lenovo:~$ 0 18 * * 5 rtcwake -m mem -t $(date -d ‘next Monday 8:30:00’ ‘+%s’)
буду благодарна за помощь
То что вы вводите, нужно было писать в файле конфигурации crontab. Если хотите проверить работу из терминала, тогда всё проще. Вводите:
#rtcwake -m mem -s 60
Эта команда усыпит компьютер и разбудит через 60 секунд
Абчолютный путь к команде пишите в кроне что то вроде
/usr/bin/rtcwake
Вместо
rtcwake
а в каком файле вы все это делаете? что т я не нашел. А можно скриншот файла? а это вот как понимать? 0 18 * * -это каждые 18 часов? 1-4 — это с понедельника по четверг rtcwake -m mem -t $ — это комнда на усыпление (date -d ‘tomorrow 8:30:00’ ‘+%s’)
У меня на Ubuntu сработала вот такая комбинация.
30 20 * * * sudo /usr/sbin/rtcwake /path/to/rtcwake -m mem -l -t $(date +\$s -d ‘tomorrow 9:30:00’)