Altere a ordem dos eventos no script bash que grava no crontab

Altere a ordem dos eventos no script bash que grava no crontab

Vindo da solução emessepost Fiz algumas alterações no script original, mas a saída não é como deveria ser. Abaixo está o script que tenho agora:

#!/bin/bash
add=$1
php=/usr/bin/php
hour=0
minute=0

update_time () {
    (( minute += add ))
    if (( minute >= 60 )) ; then
        (( hour += minute / 60 ))
        (( minute %= 60 ))
    fi
    if (( hour > 23 )) ; then
        echo "Can't fit into a day!"
        exit 1
    fi
}

cd /var/sync

echo -e 'Display current crontab\n---------------------------------------------------\n'
(crontab -l)

echo -e 'Erasing current crontab\n---------------------------------------------------\n'
(crontab -r)

echo -e 'Generating new crontab\n---------------------------------------------------\n'

for dir in sync*/ ; do
    if [[ -f "$dir"/sync.php ]] ; then
        echo -e $minute $hour * * * "$php" /var/sync/run.sh "$dir" sync.php '\n'
        (crontab -l ; echo "$minute $hour * * * "$php" /var/sync/run.sh "$dir" sync.php") | sort - | uniq - | crontab -
        update_time

        if [[ -f "$dir"/replicator/Replicator.php ]] ; then
            echo -e $minute $hour * * * "$php" /var/sync/run.sh "$dir" Replicator.php '\n'
            (crontab -l ; echo "$minute $hour * * * "$php" /var/sync/run.sh "$dir" Replicator.php") | sort - | uniq - | crontab -
        fi
        update_time
    fi
done

echo -e 'Display current crontab\n---------------------------------------------------\n'
(crontab -l)

A saída atual do script é:

0 0 * * * /usr/bin/php /var/sync/run.sh sync_bi/ sync.php
0 1 * * * /usr/bin/php /var/sync/run.sh sync_pfizer/ Replicator.php
20 0 * * * /usr/bin/php /var/sync/run.sh sync_bi/ Replicator.php
20 1 * * * /usr/bin/php /var/sync/run.sh sync_sandbox/ sync.php
40 0 * * * /usr/bin/php /var/sync/run.sh sync_pfizer/ sync.php
40 1 * * * /usr/bin/php /var/sync/run.sh sync_sandbox/ Replicator.php

Quando deveria ser:

0 0 * * * /usr/bin/php /var/sync/run.sh sync_bi/ Replicator.php
20 0 * * * /usr/bin/php /var/sync/run.sh sync_bi/ sync.php
40 1 * * * /usr/bin/php /var/sync/run.sh sync_pfizer/ Replicator.php
1 0 * * * /usr/bin/php /var/sync/run.sh sync_pfizer/ sync.php
20 1 * * * /usr/bin/php /var/sync/run.sh sync_sandbox/ Replicator.php
40 1 * * * /usr/bin/php /var/sync/run.sh sync_sandbox/ sync.php

Ou seja, primeiro execute o Replicator.phpscript e depois execute o sync.phpscript cada um entre 20 minutos começando às 00h00 e o mesmo deve ser repetido às 12h00, o que há de errado no código?

A ideia por trás desse código é escrever diretamente no crontab e também mostrar o resultado como saída no console algumas linhas para executar cada tarefa em horas/minutos. O script acima permite fazer isso, mas em algum momento falha. Como eu disse, tirei isso de uma resposta anterior que recebi no post que contei no início deste post.

informação relacionada