Come spegnere il computer dopo che un'attività è stata completata?


25

Di solito avvio un download prima di andare a scuola.
Quale comando devo usare per effettuare automaticamente i salvataggi necessari e spegnere il computer dopo che una determinata attività è stata completata?
(Dire, dopo aver installato gli aggiornamenti o dopo aver scaricato un file di grandi dimensioni.)

Ho anche inviato messaggi incrociati su askubuntu .

Risposte:


25

Dipende dall'avvio dell'attività. Se è uno strumento da riga di comando, puoi semplicemente eseguire halto shutdown -h now:

  1. wget http://..../somelargefile; halt- haltverrà eseguito dopowget

  2. wget http://..../somelargefile && halt- haltverrà eseguito se wgetnon vengono restituiti errori

  3. wget http://..../somelargefile || halt- haltverrà eseguito in caso di wgeterrori di restituzione

In alternativa a ciò si utilizza kshutdown: in questa app è possibile specificare quale azione deve essere eseguita (riavvio / arresto / ibernazione / ecc. O esecuzione del comando) e quando (dopo qualche tempo o quando esce un'altra applicazione). Se si desidera utilizzare questo strumento, è necessario scegliere il processo corretto: alcune utility di aggiornamento avviano alcuni sottoprocessi.

KShutdown


4
Puoi anche dare il shutdowntempo di aspettare; non c'è bisogno di usare kshutdown a tale scopo.
Cascabel,

1
No, ma shutdownnon ha modo di aspettare un evento reale.
Shadur,

18

Ogni processo ha una directory denominata in base al suo ID di processo (pid) nel procfilesystem. Pertanto è possibile attendere la conclusione di un processo specifico controllando se la sua directory esiste ripetutamente.

È possibile utilizzare questo per eseguire un arresto del sistema dopo la fine del processo in questo modo (sostituire 2296 con il pid per attendere):

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

vantaggi:

  • È possibile decidere se arrestare o meno dopo aver impostato il comando shell
  • L'arresto viene emesso come root, il comando da attendere non viene necessariamente eseguito come root (non è necessario aggirare il sudoprompt latepassword).

svantaggi:

  • Può accadere che il processo venga interrotto e il sistema operativo quindi riutilizzi lo stesso pid per un processo appena generato in quel secondo (condizione di competizione). Continueresti quindi ad aspettare che il nuovo processo terminasse.

2
Punto principale: funziona anche se il processo è iniziato.
Heisenberg,

Se hai avviato qualcosa da un terminale che hai ancora aperto psin quello stesso terminale dovrebbe aiutarti a individuare il PID per il CMD. Se il processo era / si trova in un altro terminale, il pipping dell'output ps per tutto attraverso grep per filtrare per il tuo comando dovrebbe aiutarti a trovarlops -elf | grep <command_related_word>
TafT

Meglio controllare la mia risposta basata su pgrepaka grep ...
Gilles Quenot,

Come posso mettere questo comando in background?
DerWeh,

1
@DerWeh avvolgerla in uno script di shell e seguire i passi qui riportati: stackoverflow.com/q/625409/1025391
moooeeeep

3

È possibile utilizzare gli operatori &&e ||per concatenare i comandi insieme. Per esempio:

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

che eseguirà un aggiornamento del sistema utilizzando aptitude, attenderà 2 secondi e passerà al livello di esecuzione 0, a seconda del sistema in uso, ciò può o meno spegnere l'hardware.

Per parlare a una o più operazioni a seguito di un'operazione più arbitraria, ad esempio un download, presumibilmente un browser Web, è necessaria una logica aggiuntiva per guardare il file di download per verificare che il download sia stato effettivamente completato, tuttavia, la logica della shell rimane invariata.


3

Se vuoi monitorare un processo già avviato, puoi farlo in una :

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

1

Esiste un'applicazione, denominata sentinella che può farlo per te con la sua GUI: Sentinella

per installarlo:

sudo aptitude update
sudo aptitude install sentinella
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.