Vorrei programmare un riavvio del mio Ubuntu ogni 30 minuti. Esiste un comando o un modo grafico per farlo?
Vorrei programmare un riavvio del mio Ubuntu ogni 30 minuti. Esiste un comando o un modo grafico per farlo?
Risposte:
Il modo migliore per farlo dipenderà dal motivo per cui si desidera che Ubuntu si riavvii ogni mezz'ora.
Quindi ti consiglio di modificare la tua domanda per spiegare perché desideri farlo.
Supponendo che le persone potrebbero utilizzare la macchina, localmente o in remoto, è meglio evitare di riavviare Ubuntu da sotto di loro senza alcun preavviso. Pertanto, piuttosto che pianificare il reboot
comando, raccomando di pianificare il shutdown
comando in modo da avvisare l'utente.
Per pianificare uno spegnimento ogni mezz'ora con un avviso 5 minuti prima, aggiungere questo a /etc/crontab
:
#minute hour mday month wday user command
*/30 * * * * root shutdown -r +5
In realtà non è necessario aggiungere la prima linea, che è un commento. L'ho incluso per chiarezza - qualcosa di simile è già lì.
-r
) cinque minuti dopo +5
l'esecuzione del comando ( ). Funziona ogni mezz'ora ( */30
). Vedi man cron
e man 5 crontab
.+5
a qualcos'altro per modificare la durata degli utenti dopo essere stati avvisati del riavvio.0,30
anche il minuto funzionerà, se lo preferisci. (Allo stesso modo, se fosse ogni 20 minuti, potresti scrivere */20
o 0,20,40
.)/sbin
sia nella PATH
variabile specificata nella parte superiore di /etc/crontab
. Altrimenti, shutdown
(sotto command
) dovrà essere invocato come /sbin/shutdown
.Il comando verrà sempre eseguito sulla mezz'ora, se la macchina è attiva e funzionante in quel momento . Ciò farà sì che gli arresti vengano annunciati ogni mezz'ora ed eseguiti a 5 minuti e 35 minuti dopo l'ora.
sudo shutdown -c
.shutdown
ma si applicherebbe ugualmente se stavi programmando reboot
.) In tal caso, modifica la domanda per spiegare le tue esigenze specifiche. (Lo consiglierei anacron
per questo, ma i tuoi intervalli di tempo sono troppo brevi.)Potrebbe essere necessario configurarlo in modo che sia facile per un amministratore sospendere tutti i riavvii pianificati automaticamente:
#minute hour mday month wday user command
*/30 * * * * root [ -e /etc/noautoreboot ] || shutdown -r +5
Questa pianificazione si riavvia allo stesso modo - ogni mezz'ora, con un avviso di cinque minuti - tranne per il fatto che non pianificherà un riavvio se noautoreboot
esiste un file chiamato /etc
.
Questo file di controllo può essere creato da un amministratore con:
sudo touch /etc/noautoreboot
Può essere cancellato con:
sudo rm /etc/noautoreboot
Nota che è importante che il file esista o meno , non ciò che contiene.
Se il riavvio è previsto e gli utenti sono avvertiti, quindi viene creato il file, si verificherà ancora il (immediatamente imminente) riavvio.
Come funziona? Utilizza un cortocircuito -evaluated o operatore ( ||
) come abbreviazione di:
Se
/etc/noautoreboot
non esiste, corrishutdown -r +5
.
Questa risposta spiega come il corto circuito ed e o gli operatori in grado di eseguire if
- then
logica. Per una spiegazione breve, intuitiva e altamente informale, puoi leggere il comando in questo modo:
/etc/noautoreboot
esiste! Oppure, corrishutdown -r +5
.
Vedere man [
per vedere come viene eseguito il test stesso.
Adoro farlo dicendo al Session Manager che vogliamo riavviare. Questo può essere fatto senza i permessi di root, e otteniamo una bella finestra che ci avverte che il sistema verrà riavviato, anche se potremo annullare il riavvio.
Installa gnome-schedule
da Ubuntu Software Center. Se non si desidera installare nulla di aggiuntivo, farlo nel modo terminale.
Apri gnome-schedule
dal trattino, crea una nuova attività ripetuta e imposta queste opzioni:
dbus-send --print-reply --dest="org.gnome.SessionManager" /org/gnome/SessionManager org.gnome.SessionManager.Reboot
Lascia le altre opzioni ai valori predefiniti. Clicca su Aggiungi .
Esegui dal terminale:
crontab -e
Aggiungi questa riga:
0,30 * * * * DISPLAY=:0 dbus-send --print-reply --dest="org.gnome.SessionManager" /org/gnome/SessionManager org.gnome.SessionManager.Reboot
Salva ed esci. Supponendo che si sta utilizzando nano
(quella di default), premere Ctrl + O e Ctrl + x .
Nota che questo non funzionerà se il tuo DISPLAY è effettivamente diverso da :0
, ed è per questo che questo metodo non è preferito. Ma, onestamente, se riavvii il computer ogni 30 minuti, il tuo DISPLAY probabilmente lo sarà sempre :0
.
Entrambi i metodi spiegati sopra dipendono da alcuni componenti di Gnome, trovati sia sulle sessioni di Gnome che su Unity. Se vuoi farlo su altri ambienti (come KDE di Kubuntu, LXDE di Kubuntu ...) è meglio sostituire il comando con questo invece:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
Ciò non richiederà conferma e si riavvierà immediatamente, ma funzionerà su tutti gli ambienti, presupponendo ovviamente che ConsoleKit non sia stato disinstallato manualmente.
Esegui sudo crontab -e
dalla riga di comando e aggiungi questa riga al file:
0,30 * * * * reboot
Questo dice al sistema di eseguire il comando reboot
ogni 30 minuti come root. Per una panoramica della sintassi temporale, consultare qui: http://linuxmoz.com/crontab-syntax-tutorial/
reboot
deve essere eseguito come root
, e questo lo aggiunge al crontab personale dell'utente, quindi funziona come quell'utente non root. (La stessa cosa con sudo reboot
non funzionerà anche perché sudo
proverà a richiedere una password e fallirà.) /etc/crontab
Invece dovrebbe essere usato per questo (si noti che la sua sintassi è leggermente diversa).
sudo crontab -e
e quindi creare una voce cron.
Utilizzare cron
per pianificare un lavoro ogni 30 minuti. Punta quel lavoro su uno script di shell che ha semplicemente
reboot
dentro.
Dato che cron
funziona come root, non dovresti fare nulla di speciale in termini di autorizzazioni.
Sì, infatti, mai su nessuno dei miei sistemi consento crontab basati sull'utente (Esistono modi migliori per consentire agli utenti di eseguire attività pianificate a livello di utente) cron è stato progettato fin dall'inizio solo per l'automazione del sistema e non per gli utenti a pianificare un normale compiti. Cose come le rotazioni dei tronchi (che succede ancora oggi)
Il riavvio DEVE essere eseguito come root per funzionare correttamente, l'alternativa è impostare il suo bit appiccicoso, in modo che quando viene eseguito come utente normale in realtà viene eseguito come root e funzioni come previsto, ma nel fare ciò si apre quindi il server per consentire regolarmente gli utenti a riavviarlo a piacimento.
Potresti anche automatizzare una chiamata a SUDO, ma ho bisogno di scavare in quella, non sono sicuro di poter automatizzare la necessità di una password con SUDO (non la uso spesso, preferisco semplicemente passare direttamente alla radice shell usando SU)
Se lo configuri in crontab a livello di sistema, tutto viene eseguito come root, quindi la mia affermazione è accurata (ho appena trascurato di menzionare che dovrebbe essere usato quello a livello di sistema)
Per quanto riguarda la tua domanda "Perché avvolgerlo in una sceneggiatura?" Beh perchè no? Se l'OP lo inserisce in uno script di shell, in futuro a un certo punto dovrà aggiungerlo, semplicemente aggiunge allo script, invece di aprire crontab per individuare il lavoro, rimuoverlo, sostituirlo con uno script di shell, quindi scrivi una sceneggiatura con il vecchio + nuovo in.
Oltre 20 anni come amministratore / sviluppatore di sistemi che lavorano con sistemi fin da Ultrix / Solaris e persino VAX mi hanno insegnato un punto importante.
Se riesci a renderlo più facile all'inizio, allora rimane facile per la sua vita.
Davvero non ho questo atteggiamento "minimalista" che hanno molti amministratori di sistema moderni, in cui fare il meno possibile è la chiave del successo. La maggior parte dei server in questi giorni è facilmente 20 volte + più potente di qualsiasi cosa io abbia mai iniziato, e questo tipo di scenario (Wrapping in script di shell) è stato raccomandato pratica allora, quindi non c'è davvero alcun argomento per non farlo ora.
A meno che tu non voglia davvero andare su Unix / Linux hardcore, nel qual caso taggalo tutto sulla voce cron e collega tutto nel modo in cui dovrebbe essere fatto :-)
Tuttavia, sto divagando, e capisco anche che molti ragazzi in questi giorni vengono gettati nel profondo e mi hanno detto di far funzionare le cose, in quanto tali non hanno il tempo (e di solito l'inclinazione) di sedersi e conoscere nuove tecniche (o vecchio in questo caso) o addirittura vuoi giocare con queste cose al di fuori del lavoro.
Personalmente, ho un solo server tra quelli che eseguo che è dedicato esclusivamente per me su cui giocare, quindi posso testare cose come questa ... che è meglio A o B, quindi non è senza motivo che io consiglio di Questo.