Eu configurei a ativação do ACPI para que meu laptop acorde em um determinado horário todas as manhãs. O fuso horário para isso é UTC. Quero configurar meus crontabs também usando o UTC para que eles se ajustem ao alarme de ativação.
Como você faz isso?
Eu tentei editar /etc/default/cron
para incluir:
TZ="UTC"
mas não funciona. (Eu também tentei TZ=UTC
e TZ="UTC/GMT"
)
Alguma ideia?
sudo service cron restart
depois da edição?Respostas:
Eu tive um problema semelhante no Trusty (14.04). Solucionado, definindo o fuso horário da máquina e reiniciando o
cron
serviçosudo dpkg-reconfigure tzdata
- siga as instruções para selecionar Região / Paíssudo service cron restart
fonte
date
na linha de comando para confirmar que a data está correta conforme sua expectativa.Não há uma maneira fácil de conseguir isso. cron usa a hora local.
/etc/default/cron
e outrasTZ
especificações no crontab apenas especificam o queTZ
deve ser usado para os processos iniciados pelo cron, isso não afeta o horário de início.A maioria das soluções que vi envolvem um utilitário no meio; portanto, o cron iniciaria algo que determinaria quando iniciar no UTC (por exemplo, se você sabe que está preocupado apenas com alterações no horário de verão, inicie-o 2 horas antes, calcule o diferença de fuso horário e inicie-a. Dê uma olhada
at
. Para fazer isso, as pessoas costumam usarperl
oupython
ou linguagens de script semelhantes).Existe uma maneira desagradável de invadir, se você quiser. O cron lê apenas as informações da TZ do sistema na inicialização. Portanto, se este é um servidor em execução, você pode simplesmente definir TZ para UTC, reiniciar e, após a inicialização, configurá-lo para o fuso horário local. Você pode escrever isso também.
Como uma abordagem alternativa, também dê uma olhada na
@reboot
sintaxe do cron, que deve executar scripts após a inicialização, que soa como o que você pode querer.fonte
Há um arquivo que controla o fuso horário do sistema. Acabei de receber o mesmo problema, eis a solução:
Se você não configurou manualmente nenhum fuso horário, a execução
date
deve exibir a hora UTC.criar um backup
remova o arquivo:
Eu moro em Chicago, (pode ser necessário alterar o caminho, usando a tecla tab ajuda) assim:
Então reinicie. Quando a inicialização do sistema executa: date
agora seu fuso horário deve estar lá agora, e o cron examinará isso.
FYI: definir a variável TZ é uma solução temporária e pode funcionar como uma "máscara" às vezes.
fonte
date
funcionou sem a reinicialização e a barra de reiniciar o sistema operacionalsudo service crond restart
foi suficiente para corrigir meus tempos de trabalho do cron.Em março de 2017, descobri que o crond suporta a variável CRON_TZ em cada crontab.
- citação da página de manual do crontab (5)
Isso me permitiu especificar o tempo para executar cada cronjob no horário local, que representava automaticamente o horário de verão, enquanto o servidor permanecia no UTC.
fonte
ls /usr/share/zoneinfo/America
para ver as opções.OK, levei algum tempo e descobri como fazer isso no Ubuntu Natty, e aqui está como eu fiz funcionar. Pode haver uma maneira mais elegante, mas dessa maneira funciona.
Primeiro, precisamos envolver o executável cron em um shell que defina a variável TZ. Aqui está como:
Em seguida, crie um novo arquivo / usr / sbin / cron. Eu usei o vim, mas você pode usar qualquer editor que quiser, basta fazer o arquivo ficar assim:
Torne o novo arquivo cron executável:
Agora, reinicie o daemon cron:
Seus trabalhos cron agora serão executados em uma programação baseada em UTC - NO ENTANTO, mesmo que o horário em que sejam executados seja UTC, quando executados, eles terão o fuso horário definido para o que for definido para o sistema. Para mudar isso, coloque isso no seu crontab antes de qualquer comando:
Portanto, o seu crontab será mais ou menos assim:
fonte
Veja
/etc/default/cron
. Você pode definirTZ
aqui para -all- crontabs e deve serTZ=UTC
iirc. Portanto, seu método deveria ter funcionado.Dê uma olhada no fcron . Você pode definir crontabs individuais em diferentes fusos horários:
timezone-name 'time zone of the system'
Execute o trabalho no fuso horário especificado. timezone-name é uma sequência válida para a variável de ambiente TZ: consulte a documentação do seu sistema para obter mais detalhes. Por exemplo, "Europa / Paris" é válido em um sistema Linux. Esta opção lida com as alterações do horário de verão corretamente. A variável de ambiente TZ é configurada para o valor do fuso horário quando um trabalho que define esta opção é executado.
Observe que, se você der um argumento incorreto de nome do fuso horário, ele será ignorado silenciosamente e o trabalho será executado no fuso horário do sistema.
fonte
Por favor, veja o meu próximo post para uma solução específica do Ubuntu
Eu sei que este é um fórum do Ubuntu, mas acredito que a resposta será muito semelhante a como você faria isso em um sistema Red Hat. Não tenho um sistema Ubuntu à mão para testar isso, mas testei no Red Hat.
Tudo o que você precisa fazer é adicionar uma linha ao script init do cron daemon. Defina e exporte a variável de ambiente TZ, assim:
Em seguida, reinicie seu daemon cron. Certifique-se de colocar essa exportação no script de início do daemon cron APÓS qualquer outra configuração e fonte de variáveis - acho que talvez seja por isso que a edição do
/etc/default/cron
script original do pôster não funcionou para ele. Talvez ele tenha definido, mas foi redefinido por algo mais adiante no script.Observe que isso afetará apenas o próprio daemon cron, e não os trabalhos executados via cron, portanto, se você quiser que um trabalho cron use o UTC como fuso horário, será necessário configurá-lo também no trabalho.
Você provavelmente não pode copiar esse texto literalmente e fazê-lo funcionar em uma caixa Ubuntu, mas aqui está o script init que usei para testar isso no Red Hat. Você encontrará a exportação logo antes da
start()
função:fonte
Acabei de descobrir isso no Ubuntu 14/16. Funcionou perfeitamente para mim.
Etapas (sudo implícitas):
fonte
Que tal avaliar o tempo utc em um script de shell? Agende o script de shell para ser executado a cada hora. Na parte superior do script, obtenha a hora UTC do comando date. Se não for a hora UTC desejada, saia.
Este script será encerrado se não for 01:00 utc.
fonte
Você pode definir a variável de ambiente CRON_TZ Se a tarefa cron for executada em um servidor remoto, você provavelmente deve notar que o shell usado pelo crontab é sh . Você pode verificar duas vezes em / etc / crontab .
fonte