como posso agendar uma reinicialização no Linux?

38

Eu sou novo no Linux e quero agendar uma reinicialização à meia-noite. Como devo fazer isso?

Edições:

  • Me desculpe, eu não coloquei os detalhes completos. Quero uma reinicialização a cada 3º sábado do mês às 23:30.

  • Não sei o que há de errado, mas não consigo encontrar o crontab. O que eu tenho é cron.d; cron.daily; cron.weekly; cron.monthly;

Sinto muito pela pergunta noob. Por favor me ajude. Obrigado.

klauriens
fonte
2
A verdadeira questão é por que você gostaria de fazer isso regularmente, você tem um aplicativo com vazamento ou algo assim? Se você está programando reboots regulares para resolver um problema, então você provavelmente tem um problema maior ...
JamesHannah
1
Deseja reiniciar todas as noites?
Matt Simmons
4
Não estou votando negativamente, porque é uma decisão política (e acho que as reinicializações noturnas são um pouco excessivas), mas agendar regularmente reinicializações em uma infraestrutura é uma maneira decente de garantir que as máquinas tenham kernels atualizados e todos os serviços em execução estão remendados. Ouvi um limite de tempo de atividade de três meses como um bom meio termo.
Matt Simmons
Se este fosse um comentário sobre a pergunta, e não uma resposta, eu a votaria. Na verdade, eu mudaria de idéia, porque a pergunta era ambígua sobre se isso era algo único ou comum. :)
intui
3
/etc/crontaba entrada como 30 23 15-21 * 6 /sbin/shutdown -r nowserá reiniciada às 23:30 no terceiro sábado de cada mês.
Chris S

Respostas:

45

Digite shutdown -r 0:00e ele será reiniciado à meia-noite.

Se você deseja reiniciar a cada noite, adicione uma entrada cron usando crontab -e como root para executar shutdown -r a cada meia-noite

@midnight shutdown -r now
raio
fonte
3
Um argumento de tempo é obrigatório, você pode usar now.
Tobu
Não ... se ele quer um comando único e deseja digitar o comando agora, ele deve adicionar o horário!
raio de
3
@ Não, ele precisa de um argumento de tempo, como nowna linha crontab.
Pausado até novo aviso.
Oups sim desculpe, eu descaracterizou Tobu comentário e acho que ele diz 00:00 era inútil no primeiro comando ... Eu editei a correta (e Massimo responde também)
raio de
Eu estaria interessado em saber quais outras @{command}variáveis ​​estão disponíveis.
Greg
16

Usando crontab.

http://en.wikipedia.org/wiki/Crontab

A adição desta entrada ao / etc / crontab deve fazer:

0 0 * * * /sbin/shutdown -r now
Massimo
fonte
3
shutdownprecisa de um argumento de tempo comonow
Pausado até novo aviso.
1
Isso fará a reinicialização todas as noites. Não tenho certeza se é isso que ele quer.
cstamas
1
A pergunta original fazia parecer que ele queria que fosse reiniciado todas as noites. Ele realmente quer que ele reiniciado a cada 3 sábado, que ainda seria mais fácil com um crontab
Chris S
Eu não sei o que há de errado, mas não consigo encontrar o crontab ..? o que eu tenho é o cron.d; cron.daily; cron.weekly; cron.monthly; Sinto muito pela pergunta noob.Pls me ajudar. obrigado #
30510
Depende da distribuição que você está usando, mas geralmente você deve encontrar um arquivo chamado "crontab" no diretório / etc do seu sistema. Você também deve poder examinar o crontab atual usando o comando "crontab -l" e editá-lo usando "crontab -e".
Massimo
13

Outra opção é o comando at , disponível em muitas distribuições Linux. Consulte a página do manual para obter mais informações, mas a sintaxe geral para seu objetivo seria:

eco "reiniciar" | às 0000 27 de junho

Para citar a página do manual do OS X:

at - executa comandos em um horário especificado

Soa como o que estamos falando. ;)

Zayne S Halsall
fonte
1

Até onde eu sei, você não pode usar o cron para agendar tarefas para "última sexta-feira de cada mês" ou "terceira quinta-feira de cada mês". O que você pode fazer, por mais feio que pareça, é executar um script todos os sábados às 23:30 e fazer com que esse script determine se esse sábado em particular é o terceiro sábado da semana (pode ser feito usando os comandos date e talvez cal) .

Eu espero que isso ajude. Não encontrei uma solução elegante para esse problema. Encontrei este tópico, porque estava procurando uma solução para o mesmo problema.

ervingsb
fonte
1
os comentários acima de "30 23 15-21 * 6 / sbin / shutdown -r now" funcionarão. Vai basicamente só correr na terceira semana do mês, mas só quando também é sábado
Sirex
Eu não acho que essa linha cron funcione como você pensa.
ervingsb
Criei as duas linhas a seguir: "30 23 1-7 * 4 date" e "30 23 1-7 * 3 date". Ontem à noite recebi dois e- mails dizendo: "Qua, 7 de março às 23:30:02 CET 2012"
ervingsb
o último campo corresponde ao dia da semana, com zero sendo domingo. o cronjob 4 não deveria ter correspondido na quarta-feira.
319 Sirex
Foi isso que eu quis dizer. A regra que você escreveu não significa o que você pensa que significa. Ele acionará o trabalho todos os dias durante uma semana. Não importa o dia da semana.
9111 ervingsb #
0

1) na linha de comando, digite 2) depois que você souber onde a reinicialização está localizada (geralmente / sbin / reboot) cd em um dos diretórios em /etc/cron.daily, /etc/cron.weekly, / etc / cron. por hora etc ... ou sejawhich reboot
cd /etc/cron.weekly

3) crie um arquivo (usando nano ou vim), chame-o de zzreboot e adicione as seguintes linhas:

#! / bin / sh
/ sbin / reboot

O motivo pelo qual você deseja chamar o arquivo zzwhatever é garantir que seja o último trabalho chamado após todos os outros trabalhos. Para ter certeza, basta fazer um ls -lno diretório e verificar se é o último arquivo.

Shawn Bakhtiar
fonte