definindo um cronjob no tempo do IST

7

Estou tentando definir um cronjob em um fuso horário diferente. Eu pesquisei muito e achei editando /etc/default/cron é o caminho a percorrer. Mas esse arquivo está obsoleto e vejo a mensagem a seguir, então adicionei TZ=IST no arquivo /etc/init/cron.conf . Não tenho certeza se isso funcionará, alguma dica de como avançar, por favor?

# This file has been deprecated. Please add custom options for cron to
# /etc/init/cron.conf and/or /etc/init/cron.override directly. See
# the init(5) man page for more information

Estou usando o cron 3.0pl1-120ubuntu4 no Ubuntu Linux.

    
por tesster 18.08.2013 / 21:02

2 respostas

3

um cron em um TZ diferente

Você pode tentar definir a variável CRON_TZ em vez de TZ . Essas opções parecem ser específicas da distribuição. Eu olhei nas seguintes man pages ( man 5 crontab , em seguida, procure por TZ ) para o Fedora e o Ubuntu.

O Fedora tem como CRON_TZ=IST enquanto o Ubuntu diz assim:

The cron daemon runs with a defined timezone. It currently does not support per-user timezones. All the tasks: system's and user's will be run based on the configured timezone. Even if a user specifies the TZ environment variable in his crontab this will affect only the commands executed in the crontab, not the execution of the crontab tasks themselves.

A página man do Fedora diz assim:

The CRON_TZ variable specifies the time zone specific for the cron table. The user should enter a time according to the specified time zone into the table. The time used for writing into a log file is taken from the local time zone, where the daemon is running.

Dado que você está no Ubuntu, não espero que isso funcione, mas pode acontecer. Eu verifiquei no Ubuntu 12.10.

Tente algo assim:

#m  h           d   m   wday    command
CRON_TZ=IST
5   0,6,12,18   *   *   *       /path/to/script.bash

Todos os crons em um TZ diferente

Se, no entanto, você estiver planejando executar todos os seus crons em um fuso horário diferente, você poderá adotar a tática mais dramática de alterar o TZ para o daemon do cron. Algo parecido com isto no script stop / start:

# /etc/init.d/crond
...
...
# Source function library.
. /etc/rc.d/init.d/functions

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

export TZ=IST
start() {
    if [ $UID -ne 0 ] ; then
        echo "User has insufficient privilege."
        exit 4
    fi
    [ -x $exec ] || exit 5
    [ -f $config ] || exit 6
    echo -n $"Starting $prog: "
    daemon $prog $CRONDARGS
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
}
...
...

Este é o código do meu script de parada / início do Fedora crond, mas uma alteração semelhante pode ser feita no seu script de parada / início do Ubuntu para o crond.

    
por 19.08.2013 / 01:21
0

Não importa, mas tente colocar a string "IST" entre aspas.

Em cron.conf ou /etc/default/cron :

export TZ='IST'

Além disso, em vez de usar o nome abreviado, tente usar o nome longo:

export TZ='Asia/Kolkata'

Ou coloque isso no seu ~/.profile se você estiver fazendo crontabs

export TZ='Asia/Kolkata'

Depois de fazer alterações no arquivo de configuração deste daemon, você precisa reiniciá-lo:

service cron restart
    
por 19.08.2013 / 15:27