Como posso agendar uma reinicialização noturna?

81

Estou tendo alguns problemas periódicos ao executar um aplicativo específico, o XBMC. Se eu uso o XBMC regularmente, não pareço ter nenhum problema, mas se o deixo sem vigilância por mais de 12 horas, preciso reiniciar para fazê-lo funcionar novamente.

Eu sei que uma reinicialização agendada NÃO é a resposta, mas até que eu possa descobrir o problema, preciso agendar uma reinicialização todas as manhãs para que minha esposa possa usá-lo se eu estiver ausente e não for jogado pela janela :)

Algum comprador?

Braiam
fonte

Respostas:

133

Eu usaria o cron (já deve estar instalado):

Edit crontab:

sudo crontab -e

Na primeira vez em que você precisar escolher seu editor preferido (como o nano),

insira uma linha como

0 4   *   *   *    /sbin/shutdown -r +5

no fundo. Explicação:

m      h    dom        mon   dow       command
minute hour dayOfMonth Month dayOfWeek commandToRun

então a linha

  0 4   *   *   *    /sbin/shutdown -r +5

reiniciaria seu sistema todos os dias às 4:05 da manhã. (04:00 + 5 minutos)

Ctrl+ X, Y, EnterDeverá fazê-lo fora do crontab (se estiver usando nano)

Nota: pode ser necessário executar crontab -ecomo root, porque o desligamento precisa de raiz. crontab -eabre um arquivo em / tmp em vez do crontab real para que ele possa verificar se há erros no seu novo crontab. Se não houver erros, seu crontab atual será atualizado.

sBlatt
fonte
1
Obrigado pela informação. A única coisa que eu precisava fazer era alterar o comando para / sbin / shutdown para que funcionasse para mim.
1
isso não funcionou para mim. usando os dois crontab -ee sudo crontab -esalva o arquivo em um local temporário quando você sai (por exemplo, /tmp/crontab.Y88XQl/crontab) e a tarefa não é executada. Eu fui forçado a editar o / etc / crontab diretamente
wal
@wal "crontab -e abre um arquivo em / tmp em vez do crontab real, para que ele possa verificar se há erros no seu novo crontab e impedir que você substitua o crontab real por esses erros. Se não houver erros, o crontab real será ser atualizado. " unix.stackexchange.com/questions/197504/…
Christh
14

Adicionar isso /etc/cron.daily/zz-rebootdeve funcionar:

#!/bin/sh
shutdown -r now

E sudo chmod a+x /etc/cron.daily/zz-reboot. O prefixo "zz" forçará a execução por último de todos os outros scripts nesse diretório. Verifique /etc/crontabpara que hora do dia isso realmente acontecerá:

grep daily /etc/crontab | awk '{print $2 ":" $1}'

Se isso não funcionar, uma entrada cron "regular" também funcionará, via sudo crontab -e

MINUTE HOUR * * * shutdown -r now

E, finalmente, se você quiser apenas fazer reinicializações únicas, poderá usar at:

echo "shutdown -r now" | sudo at 04:30
Kees Cook
fonte
tanto quanto eu sei que isso vai reiniciar o sistema ao mesmo tempo que criou este arquivo todos os dias, por favor me corrijam se eu estiver errado
sBlatt
1
Não é bem assim: ele será reiniciado uma vez por dia a qualquer momento que o cron.daily for executado, o que é um pouco imprevisível. Se você não tiver anacroninstalado, é 06:25, horário local, o que pode ser bom (ou pode ser horrível se você acordar cedo). Se sim, o que eu acho que é o padrão, pode demorar 10 minutos depois que a máquina é ligada pela primeira vez todos os dias, o que seria irritante. De qualquer forma, cron.dailynão é um bom ajuste para isso.
Pool #
cron.daily é executado todas as noites às 6:25 no meu sistema. Geralmente, isso é definido para um minuto aleatório entre 06:00 e 06:59. Veja seu / etc / crontab para
saber
1
O maior problema com o uso do cron.daily para isso é que ele pode interferir com outros trabalhos no cron.daily.
elzapp
1

Você deve criar um script usando as instruções dadas por Kees Cook ...

Você pode simplesmente copiar e colar as informações abaixo em qualquer editor de texto e criar o zz-rebootarquivo no diretório sugerido.

Depois disso, lembre-se de clicar com o botão direito do mouse no arquivo e atribuir permissão de execução. Se você quiser usar o terminal, basta:

sudo chmod +x /etc/cron.daily/zz-reboot

Para entender melhor o que está fazendo lembrar que na /etcpasta que você geralmente encontrar arquivos de configuração e de lá você pode encontrar cron.hourly, cron.dailye outras pastas do cron. Cron cuida da execução de aplicativos e scripts em um determinado momento.

Se você quiser ser rigoroso com o tempo de reinicialização, basta digitar

sudo crontab -e

para que você possa editar o crontabpara o usuário root.

Se você se sentir melhor fazendo isso graficamente, poderá instalar a partir do gnome-schedule do Software Center. Se você deseja modificar o gnome-scheduleusuário root, certifique-se de executá-lo no terminal:

gksudo gnome-schedule

Divirta-se brincando! :)

ps: grande ponto sBlatt! Eu queria saber se há alguma maneira de forçar o cron.dailytempo de execução manualmente.

Pitto
fonte
Em / etc / crontab há uma entrada para ajustar o tempo, mas afaik, se o computador está para baixo neste momento, ele irá executar alguns minutos depois que o computador começou
sBlatt
1

Trabalho com cronjobs há cerca de um mês no meu trabalho, agendando desligamentos e reinicializações. É muito simples. Eu sei que isso foi perguntado cerca de 5 anos atrás, mas se alguém ainda tiver problemas, você pode usar esse método e será definido.

abra o terminal (ctrl + T)

sudo nano /etc/crontab

role até o fim e digite o comando abaixo

00 6 * * * root reboot 

isso está definido para reiniciar às 6h todos os dias e pressione enter

Se você deseja programar o desligamento às 23h todos os dias, pode inserir

00 23 * * * root poweroff

Ainda preciso descobrir como ligar uma máquina usando cronjob quando estiver inoperante. Vou editar esta resposta assim que descobrir.

PS, esta é a minha primeira resposta já publicada em todos os formulários; espero que ajude alguém !! : D

techfashionista
fonte
3
Há uma resposta com o mesmo conteúdo de 5 anos atrás, com mais detalhes e verificação automática de sintaxe (a crontab -e).
David Foerster
1
Não se esqueça de reiniciar cron:sudo /etc/init.d/cron restart
brcebn