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.php
Skript ausführen und danach sync.php
jeweils 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.