안녕히 가세요!
저는 칠레에서 일합니다. 문제는 여기의 연결 속도가 매우 느리고 각 스테이션이 패키지를 인터넷에 직접 업데이트하는 등의 작업이 불가능하다는 것입니다. 그래서 밤에만 rsync를 통해서만 업데이트하려는 로컬 저장소가 있습니다.
rsync에는 아무런 문제가 없으며 사용 방법을 알고 있습니다. 저는 cronjob 및 이와 유사한 내용을 비교적 처음 접했습니다.
간단히 말해서, 내가 해야 할 일은 매일 밤 저장소를 업데이트하는 것입니다. 매일 오후 7시에 시작하여 오전 7시에 끝난다고 가정해 보겠습니다.
어떻게 해야 하나요?
미리 감사드립니다.
따뜻한 안부 인사.
PD: 저는 우분투 16.04를 사용합니다.
답변1
cron을 사용하는 방법에는 두 가지가 있는데, 이는 /etc/cron.d/repo-sync
다음 형식으로 파일을 생성하는 것입니다.
<minute> <hour> <day_of_month> <month> <day_of_week> <user> <command>
예를 들어 매일 19:00에 src에서 dest로 rsync를 실행하려면 다음을 사용합니다.
0 19 * * * root rsync -a src dest
또는 위의 줄에서 사용자를 제외하고 실행하여(명령을 실행하려는 사용자로) crontab을 생성할 수 있습니다. crontab -e
예:
0 19 * * * rsync -a src dest
개인적으로 저는 시스템/루트 작업을 위해 cron.d 파일을 생성하는 것을 선호하지만 두 방법 모두 동일한 결과를 생성합니다.
이제 지정된 시간에 명령이 한 번 실행됩니다. 명령 실행이 완료되면 중지되므로 rsync가 그때까지 완료되어야 하므로 7시에 중지하도록 명령을 지정할 필요가 없습니다. 정말로 명령을 7시에 중지해야 한다면 주어진 시간에 기존 프로세스를 종료하는 또 다른 cron 작업을 실행할 수 있습니다.
0 7 * * * root killall rsync
불행하게도 이렇게 하면 모든 rsync 명령이 종료됩니다. rsync를 동시에 실행하려고 하면 부작용이 발생할 수 있으므로 이 방법을 권장하지 않습니다.
해당 pid를 파일에 기록하는 스크립트에 rsync 명령을 넣고 Kill 명령에서 해당 pid를 사용하면 이 문제를 더욱 완화할 수 있지만 이는 실제로 필요한 것보다 더 복잡할 수 있습니다.