
Я знаю, что можно запланировать выключение на определенное время через 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