Jak zamknąć system Linux w określonym czasie od terminala?

46

Wygląda na to, że mogę się wyłączyć sudo shutdown, określając czas lub minuty.

Czy istnieje sposób na określenie daty i godziny zamknięcia?

Askar
źródło

Odpowiedzi:

78

Możesz to zrobić bezpośrednio z shutdown command, patrz man shutdown:

SYNOPSIS
   /sbin/shutdown [-akrhPHfFnc] [-t sec] time [warning message]

[...]

   time   When to shutdown.

Na przykład:

shutdown -h 21:45

To potrwa shutdown -ho 21:45.


W przypadku poleceń, które nie oferują tej funkcji, możesz wypróbować jedną z następujących opcji:

A. Korzystanie z

atDemon przeznaczony jest dla właśnie. W zależności od systemu operacyjnego może być konieczne jego zainstalowanie. W systemach opartych na Debianie można to zrobić za pomocą:

sudo apt-get install at

Istnieją trzy sposoby wydawania poleceń at:

  1. Potokuj:

    $ echo "ls > a.txt" | at now + 1 min
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  2. Zapisz polecenie, które chcesz uruchomić, w pliku tekstowym, a następnie przekaż ten plik do at:

    $ echo "ls > a.txt" > cmd.txt
    $ at now + 1 min < cmd.txt
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  3. Możesz także przekazywać atpolecenia ze STDIN:

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    

    Następnie naciśnij, CtrlDaby wyjść z atpowłoki. lsKomenda zostanie uruchomiony w ciągu jednej minuty.

Możesz podać bardzo dokładne czasy w formacie [[CC]YY]MMDDhhmm[.ss], jak w

$ at -t 201403142134.12 < script.sh

Spowoduje to uruchomienie skryptu script.sho 21:34 i 12 sekundach 14 marca 2014 r.

B. Korzystanie z crona (choć nie jest to dobry pomysł na zamknięcie)

Inne podejście polega na użyciu cronharmonogramu, który jest przeznaczony do wykonywania zadań w określonych godzinach. Zwykle jest używany do zadań, które będą powtarzane, ale możesz także podać określony czas. Każdy użytkownik ma własne „crontabs”, które kontrolują, które zadania są wykonywane i kiedy. Ogólny format pliku crontab to:

*     *     *     *     *  command to be executed
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- day of week (0 - 6) (Sunday=0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)

Na przykład będzie to działać lscodziennie o 14:04:

04 14 * * * ls

Aby skonfigurować cronjob na określoną datę:

  1. Utwórz nowy plik crontab, uruchamiając crontab -e. Spowoduje to wyświetlenie okna Twojego ulubionego edytora tekstu.

  2. Dodaj ten wiersz do właśnie otwartego pliku. Ten konkretny przykład zostanie uruchomiony o godzinie 14:34 15 marca 2014 r., Jeśli ten dzień to piątek (więc OK, może działać więcej niż raz):

    34 14 15 5  /path/to/command        
    
  3. Zapisz plik i zamknij edytor.

Ta odpowiedź SO sugeruje sposób na uruchomienie go tylko raz, ale nigdy go nie użyłem, więc nie mogę za niego ręczyć.

terdon
źródło
2
Planowanie zamknięcia z cronem to naprawdę zły nawyk. Nagle zastanawiasz się, dlaczego serwer jest wyłączany w każdy poniedziałek rano.
Ouki,
4
@Ouki Przykro mi, ale po prostu nie widzę, gdzie zalecam użycie crona do zamknięcia. Wspominam w nawiasie, że jest to możliwe (tak jest), ale nie polecam tego. Zwykle lubimy tutaj wyczerpujące odpowiedzi, dlatego zaproponowałem inne alternatywy, nie sugerując, że powinny być używane shutdown. Czuję jednak to złe doświadczenie, które nie mogło być przyjemne.
terdon
2
Chodzi bardziej o sugestię, ponieważ łączysz shutdownplanowanie i cronw tej samej odpowiedzi ... Niezależnie od tego, czy jest to stacja robocza, czy serwer poczty dla 1000 użytkowników (moje smutne doświadczenie), bardziej dotyczy konsekwencji złego nawyku.
Ouki,
3
Jestem tutaj z Ouki. Podczas dyskusji shutdownnie należy go uwzględniać cron. (zwłaszcza z kimś, kto nie będzie wiedział, dlaczego to okropny pomysł.)
Ricky Beam
2
Jestem trochę zdezorientowany, że ta odpowiedź wydaje się prowadzić do informacji, które już zostały przyjęte w pytaniu. Wygląda na to, że PO wie, jak określić godzinę zamknięcia, ale chce wiedzieć, jak określić zarówno datę, jak i godzinę. Kwestia ta została uwzględniona w tej odpowiedzi, ale jest dostarczana tak, jakby była to dodatkowa informacja, kiedy w pierwszej kolejności była o to poproszona.
Weeble
24

Nie, nie można podać daty w komendzie zamykania systemu, ale istnieją dwie alternatywy:

1) Najłatwiej jest użyć polecenia at . Poniższy przykład zostanie wykonany shutdown +5o określonej godzinie i dniu:

echo "shutdown +5" | at 10:05am 2019-01-19

2) jeśli nie masz nic przeciwko użyciu kalkulatora i chcesz zamknąć w powiedzmy 24 godziny (24 * 60 = 1440 minut) i masz absolutną pewność, że system nie uruchomi się ponownie między:

shutdown -r +1440
ndemou
źródło
2
Powód mojej powyższej odpowiedzi: odpowiedź terdona jest poprawna i bardzo wyczerpująca, ale zbyt rozmowna (przynajmniej IMHO)
ndemou
2
Jeśli przez rozmowę masz na myśli pomocną i wyczerpującą ... Twoja odpowiedź nawet nie wyjaśniła atpolecenia.
Anthony
@Anthony Uważam, że ten sposób korzystania atnie zasługuje na wyjaśnienie. Widzę, że wierzysz inaczej. Różne umysły, różne poglądy.
ndemou
Ta odpowiedź nie jest już prawdziwa. Komendy van Smoorenburg, Upstart i systemd shutdownnie pozwalają na określenie daty. Ale działa zestaw narzędzi nosh shutdown, obsługujący od dawna składnię BSD.
JdeBP
@JdeBP: jaka alternatywa dla tych dwóch osób nie jest już prawdą, a czy przetestowaliście i zweryfikowali, że tak nie jest? Właśnie przetestowałem oba polecenia w 3 systemach (Ubuntu 18.04,16.04 i CentOS 7) i działały dobrze. Jeśli chodzi o resztę twojego komentarza („The van Smoorenburg ...”), nie jestem pewien, czy to wyjaśnienie twojego stwierdzenia, że ​​ta odpowiedź nie jest już prawdą, czy ogólny komentarz. Może powinieneś opublikować odpowiedź z nieco więcej informacji.
ndemou
6

Zamknie system o 12:00:

$ sudo shutdown -h 12:00

Opcje:

-h, -P, --poweroff

Wyłącz maszynę.

-r, --reboot

Uruchom ponownie maszynę.

-c

Anuluj oczekujące zamknięcie.

Hamed Kamrava
źródło
5
Twoja metoda nie pokazuje, jak zamknąć system w określonym dniu ...
Askar