Ändern Sie die Ereignisreihenfolge im Bash-Skript, das in Crontab schreibt

Ändern Sie die Ereignisreihenfolge im Bash-Skript, das in Crontab schreibt

Ausgehend von der Lösung aufDasIch habe ein paar Änderungen am Originalskript vorgenommen, aber die Ausgabe ist nicht so, wie sie sein sollte. Unten ist das Skript, wie ich es jetzt habe:

#!/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)

Die aktuelle Ausgabe des Skripts lautet:

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

Wann es sein sollte:

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

Das bedeutet, dass Sie zuerst das Replicator.phpSkript ausführen und danach sync.phpjeweils zwischen 20 Minuten ab 00:00 Uhr und 12:00 Uhr wiederholen müssen. Was ist falsch am Code?

Die Idee hinter diesem Code ist, direkt in crontab zu schreiben und das Ergebnis als Ausgabe in der Konsole anzuzeigen. Einige Zeilen, um jede Aufgabe in Stunden/Minuten auszuführen. Das obige Skript ermöglicht dies, schlägt aber an einem bestimmten Punkt fehl. Wie gesagt, ich habe dies einer früheren Antwort entnommen, die ich in dem Beitrag erhalten habe, den ich am Anfang dieses Beitrags erwähnt habe.

verwandte Informationen