Исходя из решения наэтотpost Я сделал несколько изменений в оригинальном скрипте, но вывод не такой, как должен быть. Ниже представлен скрипт, который у меня есть сейчас:
#!/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)
Текущий вывод скрипта:
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
Когда это должно быть:
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
То есть сначала запустите Replicator.php
скрипт, а затем запустите sync.php
скрипт каждый раз каждые 20 минут, начиная с 00:00 утра, и то же самое должно быть повторено в 12:00 дня. Что не так в коде?
Идея этого кода заключается в том, чтобы написать прямо в crontab, а также показать результат как вывод в консоли, несколько строк для запуска каждой задачи в час/минутах. Этот скрипт выше позволяет это сделать, но в какой-то момент, если он не сработает. Как я уже сказал, я взял это из предыдущего ответа, который я получил в посте, который я сказал в начале этого поста.