zamknięcie w określonym dniu

11

Wiem, że możesz zaplanować zamknięcie na określony czas shutdown -h 21:45i że nie powinieneś używać crontabs do takich rzeczy ze względu na ich powtarzalny charakter. Jak zaplanować zamknięcie na określony dzień, na przykład 31 sierpnia o godzinie 20:00?

Przesyłanie HDM
źródło

Odpowiedzi:

7

Najnowsze wersje Ubuntu używają systemd, a gdy konwencjonalny atdi powiązany atharmonogram dla poleceń jednorazowych albo nie jest zainstalowany, albo nie uruchamia polecenia jednorazowego, można zaplanować,systemd-run co jest nieco łatwiejsze niż ręczne generowanie systemd timer:

 systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now
HBruijn
źródło
2
Ironią jest to, że uruchomienie całej usługi w tym celu jest prawie zbędne. Sam mechanizm zamykania systemd obsługuje dowolne punkty w czasie. Narzędzie wiersza polecenia po prostu nie zapewnia dostępu do tego, ponieważ nie jest ono na równi z wierszem poleceń BSD shutdown. Jak napisałem w innej odpowiedzi, wy, którzy tego chcecie, możecie spróbować przekonać usystematyzowanych ludzi, aby uczynić swoje shutdownnarzędzie bardziej zdolnym, ze składnią dziesięcioleci, zamiast chodzić po domach systemd-run.
JdeBP
Dostaję nieprawidłową specyfikację kalendarza: 31.08.2019 20:00:00 CET
HdM Prześlij
12

atPolecenie jest dla jednego szeregowania off przyszłych egzekucji.

na przykład

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

(„<EOT>” został utworzony przez naciśnięcie Control-D)

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

Tutaj możesz umieścić swoje shutdownpolecenie.

Stephen Harris
źródło
Tak! Zapomniałem o tym, atkiedy pisałem - atogólnie jest do tego przeznaczony, chociaż w firmie może być przyjętą metodą atlub cron, w zależności od konwencji związanych z zarządzaniem / wdrażaniem konfiguracji.
flow2k
Uwaga, nie jest to dokładnie równoważne. unix.stackexchange.com/q/465322/5132
JdeBP
atjest również w stanie podjąć polecenia z rurą: echo "echo yup > $(tty)" | at now.
mosvy
7

Chociaż atjest to oczywisty sposób na zrobienie tego, myślę, że przetrwa wyłączanie, więc jeśli komputer uruchomi się ponownie przed zaplanowanym zamknięciem, może się ponownie zamknąć w zaplanowanym czasie. Dlatego używając daty bash i GNU możemy użyć opóźnionego wyłączenia.

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

NB: Jest to dokładne tylko do jednej minuty. Działa poprzez konwersję zaplanowanego czasu, a teraz na sekundy od epoki UNIX, obliczenie różnicy, konwersję na minuty, a następnie wykorzystanie tego jako opóźnienia do zamknięcia. Nie będzie działać poprawnie, jeśli zaplanowany czas minął.

CSM
źródło
3

Używasz lepszego shutdownpolecenia.

Polecenia van Smoorenburg, Upstart i systemd shutdownnie pozwalają na określenie daty. Ale shutdownpolecenie BSD przyjmuje wartość daty w specyfikacji określającej, kiedy ma zostać zamknięty, w formie yymmddhhmm. Tak było od 4BSD i tak jest w przypadku FreeBSD i OpenBSD. NetBSD rozszerzył to do ccyymmddhhmm.

Ponieważ zestaw narzędzi nosh jest także użyteczny w BSD, dałem mojemu shutdownpoleceniu tę samą możliwość, rozszerzając go CCYYMMDDHHMMna NetBSD. A ponieważ zestaw narzędzi nosh jest także użyteczny w systemie Linux, daje to systemowi Linux polecenie zamknięcia, które wymaga dat.

Oczywiście działa z nosh system-manager. Działa również z niektórymi innymi systemami. Wysyła sygnały do ​​procesu nr 1 w celu uchwycenia różnych rzeczy, a te same sygnały są rozumiane przez niektórych innych menedżerów systemu, na przykład systemd, które można również wyłączyć za jego pomocą.

Możesz go użyć lub podobne narzędzie; lub możesz spróbować przekonać autorów innych shutdownprogramów Linuksa , aby rozszerzyli swoje narzędzia tak, aby były równie zdolne jak BSD shutdown.

Dalsza lektura

  • Jonathan de Boyne Pollard (2018). shutdown. strony podręcznika użytkownika zestawu narzędzi nosh. Oprogramowania.
  • Jonathan de Boyne Pollard (2018). system-manager. strony podręcznika użytkownika zestawu narzędzi nosh. Oprogramowania.
  • shutdown. Podręcznik administratora systemu . Strony podręcznika NetBSD. 2011-11-04.
  • shutdown. Podręcznik menedżerów systemu FreeBSD . 01.01.2018.
  • shutdown. Strony podręcznika OpenBSD. 21.01.2015.
  • /unix//a/465337/5132
JdeBP
źródło
1

Aby uruchomić pracę tylko w tym roku:

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

Aby uruchomić pracę każdego roku:

0 20 31 8 * /sbin/shutdown now
Freddy
źródło
-4

Może istnieć opcja wprowadzenia roku do shutdownpolecenia, ale cron może być użyty do uruchomienia poleceń tylko raz w określonym momencie. Na przykład spróbuj

0 0 31 8 ? 2019  shutdown

Uwaga: powyższe nie jest standardową składnią cron.

flow2k
źródło
2
1. To nie znaczy, że 20:00, mówi północ. 2. Nigdy nie widziałem koleżanki z SZEŚCIĄ polami pomiaru czasu. Do jakiej implementacji cron się odwołujesz?
Wildcard
2
W harmonogramie nie ma yearpolacrontab
Seamus
Zrozumiałem później, że ta składnia nie jest „standardowym cronem”, więc zgadzam się, że nie należy jej przyjmować na pierwszy rzut oka. OP wydaje się sugerować, że istnieje ograniczenie wydajności związane z używaniem crona, więc w mojej odpowiedzi starałem się wyjaśnić - nie ma z natury żadnej nieefektywności w implementacji crona, która sprawia, że ​​nie nadaje się do jednorazowego zadania. Czy tak też myślisz?
flow2k