Como reiniciar a cada 30 minutos automaticamente?

14

Gostaria de agendar um reinício do meu Ubuntu a cada 30 minutos. Existe algum comando ou uma maneira gráfica de fazer isso?

user123498
fonte
12
Estou apenas curioso: qual pode ser o objetivo de reiniciar a cada 30 minutos?
Rafał Cieślak 16/01

Respostas:

30

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.

Reiniciando a cada 30 minutos e avisando os usuários antes de cada reinicialização:

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 rebootcomando, recomendo agendar o shutdowncomando 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á.

  • Isso agendará o sistema para reiniciar ( -r) cinco minutos após ( +5) o comando ser executado. É executado a cada meia hora ( */30). Veja man crone man 5 crontab.
  • Mude +5para outra coisa para alterar quanto tempo os usuários têm após serem avisados ​​sobre reinicializações.
  • 0,30menos de um minuto também funcionará, se você preferir. (Da mesma forma, se fosse a cada 20 minutos, você poderia escrever */20ou 0,20,40.)
  • Verifique se /sbinestá na PATHvariá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.

  • Um benefício aqui é que um administrador pode cancelar o desligamento recém-anunciado com sudo shutdown -c.
  • Se o computador estiver inoperante durante os horários específicos em que o comando agendado deve ser executado, ele não será executado. Se isso não for adequado às suas necessidades, você precisará agendar suas reinicializações de maneira diferente. (Isso não é específico para o uso de, shutdownmas seria aplicável igualmente se você estivesse agendando reboot.) Nesse caso, edite sua pergunta para explicar suas necessidades específicas. (Eu recomendaria anacronisso, mas seus intervalos de tempo são muito curtos.)

Facilitando aos administradores impedir que as reinicializações automáticas ocorram:

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 noautorebootexistir /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, execute shutdown -r +5.

    Esta resposta explica como o curto-circuito e / ou os operadores podem executar if- a thenlógica. Para uma explicação breve, intuitiva e altamente informal, você pode ler o comando desta maneira:

    /etc/noautorebootexiste! Ou, corra shutdown -r +5.

    Veja man [para ver como o próprio teste é realizado.

Eliah Kagan
fonte
12

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.

A maneira gráfica - método preferido

Instale a gnome-schedulepartir do Ubuntu Software Center. Se você não deseja instalar nada adicional, faça o Caminho do Terminal.

Abra gnome-scheduleno painel, crie uma nova tarefa repetida e defina estas opções:

  • Descrição: O que você quiser
  • Comando: dbus-send --print-reply --dest="org.gnome.SessionManager" /org/gnome/SessionManager org.gnome.SessionManager.Reboot
  • Escolha X Application logo abaixo do comando.
  • Data e hora, avançado:
    • Minuto: 0,30

Deixe as outras opções com seus valores padrão. Clique em Adicionar .


A maneira terminal - sem necessidade de software adicional

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.

Não está usando o Gnome ou o Unity?

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.

Jorge Suárez de Lis
fonte
6

Execute a sudo crontab -epartir da linha de comando e adicione esta linha ao arquivo:

0,30 * * * * reboot

Isso diz ao sistema para executar o comando a rebootcada 30 minutos como root. Para uma visão geral da sintaxe da hora, consulte aqui: http://linuxmoz.com/crontab-syntax-tutorial/

Kevin Chen
fonte
3
Isso não funcionará, como rebootdeve 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 reboottambém não funcionará porque sudotentará solicitar uma senha e falhará.) /etc/crontabDeve ser usada para isso (observe que sua sintaxe é um pouco diferente).
Eliah Kagan 15/01
1
Você pode emitir sudo crontab -ee criar uma entrada cron.
Tass
-3

Use cronpara 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.

Atualizar

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.

shawty
fonte
Ver a minha atualização .. você pode me dar o meu ponto 1 volta agora se quiser ;-)
shawty
Tente novamente ... seja paciente ...
shawty
2
Agora isso não é mais uma resposta! (Além disso, você está confundindo o bit pegajoso e o bit setuid .)
Elias Kagan
Sim, é uma resposta, digitei, adicionei como resposta, portanto, é uma resposta !!!
shawty