Jak zamknąć komputer po zakończeniu zadania?


25

Zwykle zaczynam pobieranie przed pójściem do szkoły.
Jakiego polecenia powinienem użyć, aby automatycznie wykonać niezbędne zapisy i wyłączyć komputer po zakończeniu określonego zadania?
(Powiedz, po zainstalowaniu aktualizacji lub po pobraniu dużego pliku).

Wysłałem również wiadomość na askubuntu .

Odpowiedzi:


25

To zależy od podjętego zadania. Jeśli jest to narzędzie wiersza polecenia, możesz po prostu uruchomić haltlub shutdown -h now:

  1. wget http://..../somelargefile; halt- haltzostanie wykonany powget

  2. wget http://..../somelargefile && halt- haltzostanie wykonany, jeśli wgetnie zwróci błędów

  3. wget http://..../somelargefile || halt- haltzostanie wykonany, jeśli wystąpią wgetbłędy zwrotu

Alternatywą jest użycie kshutdown- w tej aplikacji możesz określić, jakie działania należy wykonać (ponowne uruchomienie / zamknięcie / hibernacja / etc lub wykonanie polecenia) i kiedy (po pewnym czasie lub po wyjściu innej aplikacji). Jeśli chcesz skorzystać z tego narzędzia, musisz wybrać prawidłowy proces - niektóre narzędzia aktualizacji uruchamiają kilka podprocesów.

KShutdown


4
Możesz także dać shutdownczas na czekanie; nie ma potrzeby używania kshutdown do tego celu.
Cascabel,

1
Nie, ale shutdownnie ma możliwości oczekiwania na faktyczne wydarzenie.
Shadur

18

Każdy proces ma katalog nazwany zgodnie z jego identyfikatorem procesu (pid) w procsystemie plików. Dlatego możesz poczekać na zakończenie określonego procesu, sprawdzając, czy jego katalog istnieje wielokrotnie.

Możesz użyć tego do zamknięcia systemu po zakończeniu procesu w ten sposób (zastąp 2296 przez pid, aby czekać):

su -c 'while [[ -d /proc/2296 ]]; do sleep 1; done; poweroff'

Zalety:

  • Możesz zdecydować, czy zamknąć system po uruchomieniu polecenia powłoki
  • Wyłączenie jest wydawane jako root, polecenie czekania niekoniecznie jest wykonywane jako root (nie trzeba obejść sudopytania o późne hasło).

Niedogodności:

  • Może się zdarzyć, że proces zostanie zakończony, a system operacyjny ponownie użyje tego samego pid dla nowo odrodzonego procesu w ciągu tej sekundy (warunek wyścigu). W ten sposób nadal czekasz na zakończenie tego nowego procesu.

2
Główny punkt: Działa to nawet, jeśli proces się rozpoczął.
Heisenberg,

Jeśli uruchomiłeś coś z terminala, który wciąż masz otwarty psw tym samym terminalu, powinien pomóc Ci w wykryciu PID dla CMD. Jeśli proces był / jest w innym terminalu, przesyłanie danych wyjściowych ps dla wszystkiego poprzez grep w celu filtrowania polecenia powinno pomóc ci go znaleźćps -elf | grep <command_related_word>
TafT

Lepiej sprawdź moją odpowiedź na podstawie pgrepaka grep procesu ...
Gilles Quenot

Jak mogę umieścić to polecenie w tle?
DerWeh

1
@DerWeh Zawiń w skrypt powłoki i postępuj zgodnie z instrukcjami podanymi tutaj: stackoverflow.com/q/625409/1025391
moooeeeep

3

Za pomocą operatorów &&i ||można łączyć ze sobą polecenia. Na przykład:

apt-get update && sleep 2 && init 0

który wykona aktualizację systemu przy użyciu aptitude, odczekaj 2 sekundy i przejdź do poziomu 0, w zależności od systemu może to, ale nie musi, faktycznie wyłączać sprzęt.

Aby porozmawiać z jedną lub kilkoma operacjami po bardziej arbitralnej operacji, takiej jak prawdopodobnie przeglądarka internetowa, pobieranie wymaga dodatkowej logiki, aby obejrzeć pobrany plik, aby sprawdzić, czy pobieranie faktycznie się zakończyło, jednak logika powłoki nie uległa zmianie.


3

Jeśli chcesz monitorować już rozpoczęty proces, możesz to zrobić w :

# while pgrep &>/dev/null -f process_name; do sleep 60; done; shutdown -h now

1

Istnieje aplikacja o nazwie sentinella, która może to zrobić za pomocą GUI: sentinella

do instalacji:

sudo aptitude update
sudo aptitude install sentinella
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.