Skip to content
isdnetworks
Go back

스크립트 사이의 실행 순서

새벽 배치 하나가 실패했는데 앞 배치가 아직 끝나지 않은 상태에서 시작했기 때문이었다. 두 배치가 각각 정해진 시각에 뜨도록 걸려 있었고 그 간격이 이날 모자랐다.

Table of contents

Open Table of contents

시간으로 맞춰 둔 배치

시간으로 맞추면 앞 배치가 평소보다 오래 걸리는 날에 바로 깨진다. 자료가 늘어나면 앞 배치의 소요 시간도 늘어나므로 언젠가는 반드시 겹친다.

간격을 늘리는 것으로 그날은 넘길 수 있지만 그것은 다음 한계를 미루는 것뿐이다. 근본은 순서를 시간으로 표현하고 있다는 데 있었다.

의존을 적고 이어 부르기

먼저 어느 배치가 어느 배치의 결과를 쓰는지를 적었다. 적어 보니 서로 관계없는 것들까지 시간으로 줄 세워져 있어서 불필요한 대기가 있었다.

의존이 있는 것들은 앞 배치가 끝날 때 다음을 부르게 바꿨다. 그러면 앞이 오래 걸려도 어긋나지 않고 앞이 실패하면 뒤가 아예 안 돈다.

각 단계가 스스로 확인한다

이어서 부르는 구조여도 사람이 손으로 하나만 돌리는 경우가 있으므로 각 단계가 앞 단계의 완료를 스스로 확인하게 했다. 확인해서 안 끝났으면 진행하지 않고 알린다.

이렇게 하면 어떤 경로로 불려도 잘못된 순서로는 안 돈다. 부르는 쪽과 불리는 쪽 양쪽에서 순서를 지키는 셈이다.

중간부터 다시 돌리기

전체가 이어져 있으면 중간에서 실패했을 때 처음부터 다시 돌리게 되기 쉽다. 앞부분을 다시 도는 시간이 아깝고 처리에 따라서는 두 번 돌면 안 되는 것도 있다.

그래서 어느 단계부터 다시 시작할지를 지정할 수 있게 했다. 실패한 단계를 고치고 거기서부터 이어 붙이는 것이 실제 운영에서 가장 자주 쓰였다.

걸린 시간 남기기

각 단계가 얼마나 걸렸는지를 매번 남기게 했는데 이 값이 늘어나는 것이 보여야 미리 손을 쓸 수 있다. 겹치고 나서 알면 이미 실패한 뒤다.

기록을 보다가 한 단계가 자원을 오래 잡고 있는 것도 발견해서 그것을 나누어 병렬로 돌렸다. 다만 동시에 도는 개수에 제한을 두어서 한꺼번에 몰리지 않게 했다.

정리


Share this post on:

Previous Post
나란히 적은 현재와 목표
Next Post
아무것도 측정하지 않은 0건