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

11

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

Загрузка HDM
источник

Ответы:

7

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

 systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now
HBruijn
источник
2
Ирония в том, что запуск всего сервиса для этого почти лишний. Сам механизм выключения systemd поддерживает произвольные моменты времени. Его инструмент командной строки просто не предоставляет возможности доступа к нему, потому что он не соответствует уровню командной строки BSD shutdown. Как я написал в другом ответе, вы, кто этого хотите, можете попытаться убедить системных людей сделать свой shutdownинструмент более функциональным, с синтаксисом десятилетий, вместо того, чтобы ходить по домам systemd-run.
JdeBP
Я получаю неверные спецификации календаря: 2019-08-31 20:00:00 CET
HdM Загрузить
12

Команда 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команду здесь.

Стивен Харрис
источник
Да! Я забыл о том, atкогда я размещал сообщения - atэто определенно предназначено для этого в целом, хотя в компании принятый метод может быть atили cron, в зависимости от соглашений, связанных с управлением / развертыванием конфигурации.
flow2k
Это не совсем эквивалентно, обратите внимание. unix.stackexchange.com/q/465322/5132
JdeBP
atтакже может принимать команды из трубы: echo "echo yup > $(tty)" | at now.
Мосви
7

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

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

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

CSM
источник
3

Вы используете лучшую shutdownкоманду.

Команды van Smoorenburg, Upstart и systemd shutdownне позволяют указывать дату. Но команда BSD shutdownпринимает значение даты в своей спецификации времени выключения в форме yymmddhhmm. Так было со времен 4BSD, и остается таковым для FreeBSD и OpenBSD. NetBSD расширил его до ccyymmddhhmm.

Поскольку набор инструментов nosh также можно использовать на BSD, я дал своей shutdownкоманде такую ​​же возможность, расширив ее до CCYYMMDDHHMMкаждого NetBSD. И поскольку набор инструментов nosh также можно использовать в Linux, это дает Linux команду выключения, которая принимает даты.

Это конечно работает с Nosh system-manager. Это также работает с некоторыми другими системами. Он посылает сигналы процессу № 1, чтобы воспроизвести материал, и те же сигналы понимаются некоторыми другими системными администраторами, такими как systemd, которые также могут быть отключены с его помощью.

Вы могли бы использовать это, или инструмент как это; или вы можете попытаться убедить авторов других shutdownпрограмм для Linux расширить их инструменты так же, как BSD shutdown.

дальнейшее чтение

  • Джонатан де Бойн Поллард (2018). shutdown, страницы справочника nosh toolset. Softwares.
  • Джонатан де Бойн Поллард (2018). system-manager, страницы справочника nosh toolset. Softwares.
  • shutdown, Руководство системного менеджера . Страницы руководства по NetBSD. 2011-11-04.
  • shutdown, Руководство системного администратора FreeBSD . 2018-01-01.
  • shutdown, Страницы руководства OpenBSD. 2015-01-21.
  • /unix//a/465337/5132
JdeBP
источник
1

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

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

Чтобы запустить работу каждый год:

0 20 31 8 * /sbin/shutdown now
Фредди
источник
-4

Может быть опция для ввода года в shutdownкоманду, но cron может использоваться для запуска команд только один раз в определенный момент времени. Для вашего примера попробуйте

0 0 31 8 ? 2019  shutdown

Осторожно: приведенный выше не является стандартным синтаксисом cron.

flow2k
источник
2
1. Это не говорит 20:00 вечера, это говорит о полуночи. 2. Я никогда не видел cronjob с шестью полями для синхронизации. На какую реализацию cron вы ссылаетесь?
Wildcard
2
В расписании нет yearполяcrontab
Симус
Впоследствии я понял, что этот синтаксис не является «стандартным cron», поэтому я согласен, его не следует принимать за чистую монету. OP, по-видимому, подразумевает снижение производительности, связанное с использованием cron, поэтому в своем Ответе я попытался уточнить - в реализации cron нет ничего неэффективного, что делает его непригодным для одноразовой задачи. Ты тоже так думаешь?
flow2k