выключение в определенную дату

выключение в определенную дату

Я знаю, что можно запланировать выключение на определенное время через shutdown -h 21:45и что не следует использовать crontab для таких вещей из-за их повторяющейся природы. Как можно запланировать выключение на определенное времядатанапример 31 августа в 20:00?

решение1

Команда atпредназначена для планирования однократных казней в будущем.

например

% at 8pm Aug 31
at> echo hello
at> <EOT>
job 161 at Sat Aug 31 20:00:00 2019

("<EOT>" был получен нажатием control-D)

% atq
161     Sat Aug 31 20:00:00 2019 a sweh

Вы можете разместить свою shutdownкоманду здесь.

решение2

Хотя atэто очевидный способ сделать это, я думаю, что он переживет выключения, так что если машина перезагрузится до запланированного выключения, она может снова выключиться в запланированное время. Поэтому, используя bash и GNU date, мы можем использовать отложенное выключение.

/sbin/shutdown +$(( ( $( date -d "30 may 2019 13:15" +%s ) - $( date +%s ) ) / 60 + 1 ))

NB: Это с точностью до одной минуты. Это работает путем преобразования запланированного времени, а теперь и секунд с эпохи UNIX, вычисления разницы, преобразования в минуты, а затем использования этого в качестве задержки выключения. Это не будет работать правильно, если запланированное время находится в прошлом.

решение3

Последние версии Ubuntu используют systemd, а обычный atdи связанный atпланировщик для одноразовых команд либо не установлен, либо не запущенодноразовая команда может быть запланирована с помощьюsystemd-run что несколько проще, чем вручную генерироватьsystemd timer:

 systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now

решение4

Чтобы выполнить задание только в этом году:

0 20 31 8 * test $(/bin/date +\%Y) = "2019" && /sbin/shutdown now

Для выполнения задания каждый год:

0 20 31 8 * /sbin/shutdown now

Связанный контент