Como posso automatizar o script que funciona? rtcwake, gerente de rede de serviços

0

Eu tenho um script que quero rodar em intervalos regulares ao longo do dia (11:05 16:05 e 22:05. Mas eu não quero o computador todo o dia, então eu tentei um script de sudo crontab -e sugerido aqui.

0 10 * * * sudo rtcwake -m disk -l -t $(date +%s --date '11:00')

O problema é que funcionou apenas se eu o executasse no terminal, mas não no cronjob. Eu também tentei sudo / usr / sbin / rtcwake xxxx no cronjob sem sorte.

Mas um segundo problema surgiu quando o computador acordou do manual rtcwake-call e meu script foi executado. A hora do sistema estava desligada com duas horas porque a hora do sistema havia mudado. Então eu tive que colocar um segundo cronjob para consertar a hora em que o computador voltou à vida novamente

1 11 * * * sudo hwclock -w

Como você pode ver, ele é executado um minuto após o computador acordar do primeiro rtcwake-call, colocando-o para dormir em primeiro lugar. Eu ainda não tenho certeza se funciona, porque ainda não experimentei. (O BIOS tem o horário 09:00 quando o computador tem 11:00 depois do despertar)

Mas um terceiro problema surgiu. Quando eu executei o rtcwakeup-call e tentei executar meu script manualmente, ele não funcionou porque eu não tinha conexão com a Internet.

Então eu fiz manualmente um

sudo service network-manager restart

e tentei o script. Deu certo!

Minha pergunta é: como faço a coisa funcionar como um todo? O script funcionava corretamente quando o computador estava ligado 24 horas por dia, 7 dias por semana, porque havia uma conexão com a Internet e o tempo marcava junto com a hora do sistema e o horário do SO em sincronia.

O script é executado em um computador Xubuntu 16 LTS. Talvez tenha uma configuração diferente de outras distribuições.

Se eu executo o sudo hwclock, diz que a hora é 15:20, como o relógio no canto diz. Mas quando eu faço o rtcwake

sudo rtcwake -m disk -l -t $(date +%s --date '16:25')

responde que o computador vai acordar às 18:25. Como o relógio hwclock e xubuntu pode estar sincronizado enquanto o temporizador no rtcwake está desligado em 2 horas? Como faço para sincronizar o hwclock com o rtcwake? (Este problema foi resolvido com * sudo hwclock --systohc --localtime)

O que é necessário:

cronjob - executa meu script em intervalos regulares (coletando dados da internet)

cronjob2 - faz o computador entrar no modo de hibernação mesmo que o usuário ou administrador não esteja logado

cronjob3 - quando o computador é ativado, ajusta a hora para que o primeiro script (cronjob) seja executado no momento em que era esperado e não duas horas depois

cronjob4 - reinicie a rede antes (o cronjob) é executado para que tenha uma conexão de internet recente

    
por Drill Bit 09.06.2017 / 14:05

1 resposta

0

As soluções foram para ajustar os comandos no cron

De (sem backslash% s):

sudo rtcwake -m disk -l -t $(date +%s --date '16:25')

Para (com backslash% s):

sudo rtcwake -m disk -l -t $(date +\%s --date '16:25')

Após cada despertar, também executo o sincron cron-job, que é executado aproximadamente 3 minutos após o horário de despertar. Durante esse tempo, o horário do sistema operacional passará de um atraso de duas horas para o horário correto. Depois disso, o relógio do hardware pode ser sincronizado com o tempo do sistema operacional. Se você sincronizá-lo com rapidez, ele será sincronizado no tempo e arruinará o restante dos scripts que dependem do horário correto:

sudo hwclock --systohc --localtime

O último garante que o relógio do BIOS e a hora local sejam os mesmos. Caso contrário, eles se afastam um do outro quando o relógio interno da bateria se move independentemente do processador que está parado enquanto o computador está adormecido.

Para garantir que a sincronização de horário funcione, coloquei o horário correto para executar a sincronização de horário do cron e duas horas antes do intervalo de tempo do meu computador. Isso significa que se eu quiser que a sincronização de tempo seja feita às 18:55, eu também coloco em 16:55 para que ele funcione mesmo que o relógio do hardware esteja fora de sincronia com o relógio do SO

55 16,18 * * * hwclock --systohc --localtime 

Você terá que monitorar seu próprio sistema para ver quais discrepâncias ocorrem. Se ele se movimentar, basta colocar mais horas para fazer a sincronização. Talvez até a cada hora. Quando o computador estiver adormecido, nada será feito, mas enquanto estiver acordado, sincronizará a hora a cada hora.

    
por Drill Bit 09.06.2017 / 18:22