Como reiniciar a cada 30 minutos automaticamente?

13

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

    
por user123498 15.01.2013 / 19:41

4 respostas

28

A melhor maneira de fazer isso dependerá de por que você deseja que o Ubuntu reinicie a cada meia hora.

Então, eu 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, seja local ou remotamente, é melhor evitar o reinício do Ubuntu sem qualquer aviso. Portanto, em vez de programar o comando reboot , recomendo programar o shutdown para avisar o usuário.

Para agendar um desligamento a cada meia hora com um aviso 5 minutos antes, adicione isso a /etc/crontab :

#minute hour    mday    month   wday    user    command
*/30    *       *       *       *       root    shutdown -r +5

Na verdade, você não precisa adicionar a primeira linha, que é um comentário. Eu incluí-lo para maior clareza - algo como isso já está lá.

  • Isso agendará o sistema para ser reinicializado ( -r ) cinco minutos após ( +5 ) o comando ser executado. Ele é executado a cada meia hora ( */30 ). Veja man cron e man 5 crontab .
  • Altere +5 para outra coisa para alterar o tempo de uso dos usuários após receber avisos de reinicializações.
  • 0,30 sob minuto também funcionará, se você preferir. (Da mesma forma, se fosse a cada 20 minutos, você poderia escrever */20 ou 0,20,40 .)
  • Verifique se /sbin está na variável PATH especificada perto do topo de /etc/crontab . Caso contrário, shutdown (sob command ) terá que ser invocado como /sbin/shutdown .

O comando será sempre executado na marca de meia hora, se a máquina estiver em funcionamento no momento . Isso fará com que os desligamentos sejam anunciados a cada meia hora e sejam executados aos 5 minutos e 35 minutos depois da hora.

  • Um benefício aqui é que um administrador pode cancelar o encerramento anunciado com sudo shutdown -c .
  • Se o computador estiver inativo 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ê terá que agendar suas reinicializações de maneira diferente. (Isso não é específico para o uso de shutdown , mas se aplicaria igualmente se você estivesse agendando reboot .) Nesse caso, edite sua pergunta para explicar suas necessidades específicas. (Eu recomendaria anacron para isso, mas seus intervalos de tempo são muito curto.)

Facilitando aos administradores a prevenção de reinicializações automáticas:

Você pode querer 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 cronograma é reinicializado da mesma maneira - a cada meia hora, com cinco minutos de aviso - exceto que ele não agendará uma reinicialização se um arquivo chamado noautoreboot existir em /etc .

  • Este arquivo de controle pode ser criado por um administrador com:

    sudo touch /etc/noautoreboot
    
  • Pode ser eliminado com:

    sudo rm /etc/noautoreboot
    
  • Note que é se o arquivo existe ou não, , não o que ele contém, o que importa.

  • Se a reinicialização estiver agendada e os usuários forem avisados, então o arquivo será criado, a reinicialização (imediatamente futura) ainda ocorrerá.

  • Como isso funciona? Ele usa um operador curto-circuito - avaliado ou ( || ) como abreviatura para:

      

    Se /etc/noautoreboot não existir, execute shutdown -r +5 .

    Esta resposta explica como o curto-circuito e e ou operadores podem executar if - then logic. Para uma explicação breve, intuitiva e altamente informal, você pode ler o comando desta forma:

      

    /etc/noautoreboot existe! Ou execute shutdown -r +5 .

    Veja man [ para ver como o teste é realizado.

por Eliah Kagan 15.01.2013 / 21:00
12

Adoro fazer isso dizendo ao Gerente de Sessão que queremos reinicializar. Isso pode ser feito sem permissões de root, e nós temos uma boa janela que nos avisa que o sistema será reinicializado - mesmo que possamos cancelar a reinicialização se quisermos.

A maneira gráfica - método preferido

Instale gnome-schedule do Ubuntu Software Center. Se você não quiser instalar nada adicional, faça o Terminal Way.

Abra gnome-schedule do traço, 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 Aplicativo logo abaixo do comando.
  • Hora e data, avançada:
    • Minuto: 0,30

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

O modo terminal - sem necessidade de software adicional

Executar 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

Salvar e & amp; Saída. Supondo que você esteja usando nano (o padrão), pressione Ctrl + o e Ctrl + x .

Por favor note que isto não funcionará se o seu DISPLAY é realmente diferente de :0 , e essa é a razão pela qual este método não é preferido. Mas, honestamente, se você estiver reiniciando seu computador a cada 30 minutos, seu DISPLAY provavelmente será sempre :0 .

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

Ambos os 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 pedirá confirmação e será reiniciado imediatamente, mas funcionará em todos os ambientes, supondo que você não tenha desinstalado manualmente o ConsoleKit, é claro.

    
por Jorge Suárez de Lis 15.01.2013 / 21:19
6

Execute sudo crontab -e na linha de comando e adicione esta linha ao arquivo:

0,30 * * * * reboot

Isso diz ao sistema para executar o comando reboot a cada 30 minutos como root. Para uma visão geral da sintaxe da hora, veja aqui: link

    
por Kevin Chen 15.01.2013 / 19:45
-3

Use cron para agendar um trabalho a cada 30 minutos. Aponte esse trabalho para um script de shell que simplesmente tenha

reboot

nele.

Como cron é executado como root, você não precisa fazer nada especial em termos de permissões.

Atualizar

Sim, na verdade eu nunca em nenhum dos meus sistemas permitem crontabs baseados no usuário (Existem maneiras melhores de permitir que usuários façam 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 usuários para agendar tarefas comuns. Coisas como rotações de log (o que ainda acontece hoje)

A reinicialização DEVE ser executada como root para funcionar corretamente, a alternativa é definir seu bit pegajoso, de modo que, quando executado como um usuário comum, ele seja executado como root e funcione como esperado, mas ao fazê-lo, você abrirá seu servidor para permitir que usuários regulares o reiniciem à vontade.

Você poderia até mesmo automatizar uma chamada para o SUDO, mas eu preciso cavar aquele, não tenho certeza se você pode automatizar a necessidade de uma senha com o SUDO (eu não uso isso com freqüência, eu prefiro simplesmente para um shell de root usando SU)

Se você configurá-lo em todo o crontab do sistema, então tudo é executado como root, então minha declaração é precisa (eu apenas deixei de mencionar que o sistema deve ser usado)

Quanto à sua pergunta "Por que envolvê-lo em um script?" bem, porque não? Se o OP colocá-lo em um shell script, então em algum momento no futuro precisa adicionar a ele, ele simplesmente adiciona ao script, em vez de ter que abrir crontab localizar o trabalho, removê-lo, substituí-lo por um script de shell, em seguida, escreva um script com o antigo + novo em.

Mais de 20 anos como Sys Admin / Developer trabalhando com sistemas desde Ultrix / Solaris e até mesmo o VAX me ensinou um ponto importante.

Se você puder facilitar as coisas no começo, fica fácil para a sua vida.

Eu realmente não entendo essa atitude "minimalista" que muitos administradores modernos têm, onde fazer o mínimo possível é a chave para o sucesso. A maioria dos servidores nos dias de hoje são facilmente 20 vezes mais poderosos do que qualquer coisa que eu já comecei, e esse tipo de cenário (Wrapping in shell scripts) era prática recomendada então, então não há realmente nenhum argumento para não fazer isso agora.

A menos que você realmente queira ir ao hardcore Unix / Linux, nesse caso marque tudo na entrada do cron, e coloque tudo junto do jeito que deveria ser feito: -)

No entanto, eu divago, e também entendo que muitos caras hoje em dia são jogados no fundo do poço e dizem para fazer as coisas funcionarem, como tal, eles não têm tempo (e geralmente a inclinação) para se sentar e aprender sobre novos técnicas (ou antigas, neste caso) ou até mesmo querem brincar com essas coisas fora do trabalho.

Eu, pessoalmente, tenho um único servidor entre os que executo, dedicado exclusivamente a mim, para testar coisas como essa ... o que é melhor A ou B, então não é sem motivo que eu aconselho em qualquer disto.

    
por shawty 15.01.2013 / 19:46

Tags