crontab에 쓰는 bash 스크립트의 이벤트 순서 변경

crontab에 쓰는 bash 스크립트의 이벤트 순서 변경

솔루션에서 나옴이것게시물 원본 스크립트를 몇 가지 변경했지만 출력이 예상과 같지 않습니다. 아래는 현재 가지고 있는 스크립트입니다.

#!/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스크립트를 실행하고 오전 0시부터 20분 사이에 스크립트를 실행한 후 sync.php오후 12시에도 동일한 작업을 반복해야 한다는 의미입니다. 코드에 어떤 문제가 있습니까?

해당 코드의 기본 아이디어는 crontab에 직접 작성하여 시간/분 단위로 각 작업을 실행하는 일부 라인을 콘솔에 출력으로 표시하는 것입니다. 위의 스크립트를 사용하면 그렇게 할 수 있지만 어느 시점에서는 실패할 수 있습니다. 내가 말했듯이 나는 이 게시물의 시작 부분에서 말한 게시물에 있는 이전 답변에서 이것을 가져왔습니다.

관련 정보