Gostaria de agendar um reinício do meu Ubuntu a cada 30 minutos. Existe algum comando ou uma maneira gráfica de fazer isso?
Gostaria de agendar um reinício do meu Ubuntu a cada 30 minutos. Existe algum comando ou uma maneira gráfica de fazer isso?
Respostas:
A melhor maneira de fazer isso dependerá do motivo pelo qual você deseja reiniciar o Ubuntu a cada meia hora.
Por isso, recomendo editar sua pergunta para explicar por que você deseja fazer isso.
Supondo que as pessoas possam estar usando a máquina, local ou remotamente, é melhor evitar reiniciar o Ubuntu por baixo delas sem nenhum aviso. Portanto, em vez de agendar o reboot
comando, recomendo agendar o shutdown
comando para que ele avise o usuário.
Para agendar um desligamento a cada meia hora com um aviso 5 minutos antes, adicione-o a /etc/crontab
:
#minute hour mday month wday user command
*/30 * * * * root shutdown -r +5
Você não precisa adicionar a linha do punho, que é um comentário. Eu o incluí para maior clareza - algo como ele já está lá.
-r
) cinco minutos após ( +5
) o comando ser executado. É executado a cada meia hora ( */30
). Veja man cron
e man 5 crontab
.+5
para outra coisa para alterar quanto tempo os usuários têm após serem avisados sobre reinicializações.0,30
menos de um minuto também funcionará, se você preferir. (Da mesma forma, se fosse a cada 20 minutos, você poderia escrever */20
ou 0,20,40
.)/sbin
está na PATH
variável especificada na parte superior de /etc/crontab
. Caso contrário, shutdown
(abaixo command
) terá que ser chamado como /sbin/shutdown
.O comando sempre será executado na marca de meia hora, se a máquina estiver em funcionamento naquele momento . Isso fará com que os desligamentos sejam anunciados a cada meia hora e executados em 5 e 35 minutos após a hora.
sudo shutdown -c
.shutdown
mas seria aplicável igualmente se você estivesse agendando reboot
.) Nesse caso, edite sua pergunta para explicar suas necessidades específicas. (Eu recomendaria anacron
isso, mas seus intervalos de tempo são muito curtos.)Convém configurar isso para que seja fácil para um administrador suspender todas as reinicializações agendadas automaticamente:
#minute hour mday month wday user command
*/30 * * * * root [ -e /etc/noautoreboot ] || shutdown -r +5
Esse agendamento é reiniciado da mesma maneira - a cada meia hora, com aviso de cinco minutos - exceto que não agendará uma reinicialização se um arquivo chamado noautoreboot
existir /etc
.
Este arquivo de controle pode ser criado por um administrador com:
sudo touch /etc/noautoreboot
Pode ser excluído com:
sudo rm /etc/noautoreboot
Observe que é importante saber se o arquivo existe ou não , e não o que ele contém.
Se a reinicialização for agendada e os usuários forem avisados, o arquivo será criado e a reinicialização (imediatamente a seguir ) ainda ocorrerá.
Como é que isso funciona? Ele usa um curto-circuito - avaliado ou operador ( ||
) como atalho para:
Se
/etc/noautoreboot
não existir, executeshutdown -r +5
.
Esta resposta explica como o curto-circuito e / ou os operadores podem executar if
- a then
lógica. Para uma explicação breve, intuitiva e altamente informal, você pode ler o comando desta maneira:
/etc/noautoreboot
existe! Ou, corrashutdown -r +5
.
Veja man [
para ver como o próprio teste é realizado.
Adoro fazer isso dizendo ao Gerenciador de Sessão que queremos reiniciar. Isso pode ser feito sem permissões de root, e obtemos uma boa janela que nos avisa que o sistema será reiniciado - mesmo que possamos cancelar a reinicialização, se assim o desejarmos.
Instale a gnome-schedule
partir do Ubuntu Software Center. Se você não deseja instalar nada adicional, faça o Caminho do Terminal.
Abra gnome-schedule
no painel, crie uma nova tarefa repetida e defina estas opções:
dbus-send --print-reply --dest="org.gnome.SessionManager" /org/gnome/SessionManager org.gnome.SessionManager.Reboot
Deixe as outras opções com seus valores padrão. Clique em Adicionar .
Execute a partir do terminal:
crontab -e
Adicione esta linha:
0,30 * * * * DISPLAY=:0 dbus-send --print-reply --dest="org.gnome.SessionManager" /org/gnome/SessionManager org.gnome.SessionManager.Reboot
Saída segura. Supondo que você está usando nano
(o padrão), pressione Ctrl + O e Ctrl + x .
Observe que isso não funcionará se o seu DISPLAY for realmente diferente :0
, e é por isso que esse método não é o preferido. Mas, honestamente, se você estiver reiniciando o computador a cada 30 minutos, seu DISPLAY provavelmente será sempre :0
.
Os dois métodos explicados acima dependem de alguns componentes do gnome, encontrados nas sessões do Gnome e no Unity. Se você quiser fazer isso em outros ambientes (como o KDE do Kubuntu, o LXDE do Kubuntu ...), é melhor substituir o comando por este:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
Isso não solicitará confirmação e será reiniciado imediatamente, mas funcionará em todos os ambientes, desde que você não tenha desinstalado manualmente o ConsoleKit, é claro.
Execute a sudo crontab -e
partir da linha de comando e adicione esta linha ao arquivo:
0,30 * * * * reboot
Isso diz ao sistema para executar o comando a reboot
cada 30 minutos como root. Para uma visão geral da sintaxe da hora, consulte aqui: http://linuxmoz.com/crontab-syntax-tutorial/
reboot
deve ser executado root
, e o adicionará ao crontab pessoal do usuário; portanto, ele será executado como esse usuário não raiz. (A mesma coisa com sudo reboot
também não funcionará porque sudo
tentará solicitar uma senha e falhará.) /etc/crontab
Deve ser usada para isso (observe que sua sintaxe é um pouco diferente).
sudo crontab -e
e criar uma entrada cron.
Use cron
para agendar um trabalho a cada 30 minutos. Aponte esse trabalho para um script de shell que simplesmente possui
reboot
iniciar.
Como cron
é executado como root, você não precisa fazer nada de especial em termos de permissões.
Sim, sim, de fato, nunca em nenhum dos meus sistemas permitimos crontabs baseados no usuário (existem maneiras melhores de permitir que os usuários realizem tarefas agendadas no nível do usuário) o cron foi projetado desde o início apenas para automação do sistema e não para os usuários agendarem tarefas. Coisas como rotações de log (o que ainda acontece hoje)
A reinicialização DEVE ser executada como root para funcionar corretamente, a alternativa é configurá-la com bits persistentes, para que, quando executada como um usuário comum, ela realmente execute como root e funcione conforme o esperado, mas, ao fazer isso, abra o servidor para permitir a regularidade. usuários para reiniciá-lo à vontade.
Você pode até automatizar uma chamada para o SUDO, mas eu preciso pesquisar nessa, não tenho certeza se você pode automatizar a necessidade de uma senha com o SUDO (eu não a uso frequentemente, prefiro simplesmente ir direto para a raiz shell usando SU)
Se você configurá-lo no crontab em todo o sistema, tudo será executado como raiz, portanto, minha declaração é precisa (eu apenas esqueci de mencionar que o sistema em geral deve ser usado)
Quanto à sua pergunta "Por que envolvê-lo em um script?" bem, porque não? Se o OP o colocar em um script de shell, em algum momento no futuro precisar adicioná-lo, ele simplesmente o adicionará ao invés de precisar abrir o crontab para localizar o trabalho, removê-lo, substituí-lo por um script de shell, então escreva um script com o antigo + novo no.
Mais de 20 anos como administrador / desenvolvedor de sistemas, trabalhando com sistemas desde o Ultrix / Solaris e até o VAX, me ensinaram um ponto importante.
Se você pode facilitar as coisas no começo, permanece fácil por toda a vida.
Eu realmente não entendo essa atitude "minimalista" que muitos administradores de sistemas modernos têm, onde fazer o mínimo possível é a chave para o sucesso. Atualmente, a maioria dos servidores é 20 vezes mais poderosa do que qualquer coisa em que comecei, e esse tipo de cenário (agrupamento de scripts de shell) era uma prática recomendada, então não há realmente nenhum argumento para não fazê-lo agora.
A menos que você realmente queira usar o Unix / Linux hardcore, nesse caso, marque tudo na entrada do cron e junte tudo da maneira que deve ser feita :-)
No entanto, eu discordo, e também entendo que muitos caras hoje em dia são jogados no fundo do poço e instruídos a fazer as coisas funcionarem; dessa forma, eles não têm tempo (e geralmente a inclinação) para se sentar e aprender sobre novas técnicas (ou antigo neste caso) ou até quer brincar com esse material fora do trabalho.
Pessoalmente, tenho um servidor único entre os que corro, dedicado exclusivamente a brincar, para que eu possa testar coisas como essa ... que são melhores A ou B, por isso não é sem razão que eu aconselho sobre qualquer um dos esta.