відключення на конкретну дату


11

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

Відповіді:


7

Останні версії Ubuntu використовують systemd, і коли звичайний atdі пов'язаний з ним atпланувальник одноразових команд або не встановлений, або не працює одноразова команда, може бути запланованаsystemd-run дещо простіше, ніж вручну генерувати systemd timer:

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

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>" було створено натисканням клавіші управління-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.
mosvy

7

Хоча atце очевидний спосіб зробити це, я думаю, що він переживе відключення, тому якщо машина перезавантажиться перед запланованим відключенням, вона може відключитися знову в запланований час. Тому, використовуючи дату bash та GNU, ми можемо використовувати затримку відключення.

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

NB: Це точно лише до однієї хвилини. Він працює, перетворюючи запланований час, а тепер - секунду з епохи UNIX, обчислюючи різницю, перетворюючи на хвилини, а потім використовуючи це як затримку до відключення. Він не працюватиме правильно, якщо запланований час минув.


3

Ви використовуєте кращу shutdownкоманду.

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

Оскільки набір інструментів "nosh" також можна використовувати на BSD, я дав мою shutdownкоманду тієї ж можливості, поширивши її CCYYMMDDHHMMна NetBSD. А тому, що набір інструментів nosh також використовується в Linux, це дає команду Linux для відключення, яка приймає дати.

Звичайно, це працює з носом system-manager. Він також працює з деякими іншими системами. Він надсилає сигнали для обробки №1 для введення в дію матеріалів, і ті ж сигнали розуміють деякі інші системні менеджери, наприклад systemd, які також можна вимкнути за допомогою нього.

Ви можете використовувати його або такий інструмент, як він; або ви можете спробувати переконати авторів інших shutdownпрограм Linux розширити свої інструменти так само, як і BSD shutdown.

Подальше читання

  • Джонатан де Бойне Поллард (2018). shutdown. сторінки інструментів для набору інструментів. Програмне забезпечення.
  • Джонатан де Бойне Поллард (2018). system-manager. сторінки інструментів для набору інструментів. Програмне забезпечення.
  • shutdown. Посібник із системного менеджера . Сторінки посібника NetBSD. 2011-11-04.
  • shutdown. Посібник для управління системою FreeBSD . 2018-01-01.
  • shutdown. Сторінки керівництва OpenBSD. 21.01.2015.
  • /unix//a/465337/5132

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.


2
1. Це не говорить 20:00, це говорить опівночі. 2. Я ніколи не бачив cronjob із шістьма полями для часу. На яку реалізацію хронів ви посилаєтесь?
Wildcard

2
У графіку немає yearполяcrontab
Seamus

Після цього я зрозумів, що цей синтаксис не є "стандартним кроном", тому я згоден, його не слід сприймати за номіналом. ОП, схоже, означає, що існує покарання за ефективність, пов’язане з використанням cron, тому у своєму відповіді я намагався уточнити - немає жодної суті неефективної щодо впровадження крона, яка робить непридатною для одноразового завдання. Це те, що ви також думаєте?
flow2k
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.