종료 스크립트가 두 번 실행된 것 같습니다.

종료 스크립트가 두 번 실행된 것 같습니다.

직장에서 컴퓨터용으로 작성하는 작은 백업 bash 스크립트가 있습니다. 종료 시 먼저 실행되도록 스크립트를 복사 /etc/rc0.d/하고 호출했습니다 . K01backup내 컴퓨터(Ubuntu 14.04LTS 실행), 작업 복사본 및 별도의 내부 SSD에 있는 가상 머신의 모든 데이터를 외부 하드 드라이브에 백업하고 각 폴더의 파일에 로그 출력을 추가합니다.

스크립트는 다음과 같습니다.

#!/bin/bash

LOG="/syncLog"
VMORIG="/media/SSDData/VM"
PROJORIG="/media/Data/Projects"
DESTROOT="/media/ExtData/Backups"
LOGVM=${DESTROOT}"/VM"${LOG}
LOGPROJ=${DESTROOT}"/Projects"${LOG}
ALLORIG="/"
DESTALL=${DESTROOT}"/All"
LOGALL=${DESTROOT}"/All"${LOG}


echo "STARTED" > ${LOGPROJ}
date +%d.%m.%Y/%H:%M:%S >> ${LOGPROJ}
rsync -avvx --progress --no-whole-file ${PROJORIG} ${DESTROOT} >> ${LOGPROJ}
echo "FINISHED" >> ${LOGPROJ}
date +%d.%m.%Y/%H:%M:%S >> ${LOGPROJ}

echo "STARTED" > ${LOGVM}
date +%d.%m.%Y/%H:%M:%S >> ${LOGVM}
rsync -avvx --progress --no-whole-file  ${VMORIG} ${DESTROOT} >> ${LOGVM}
echo "FINISHED" >> ${LOGVM}
date +%d.%m.%Y/%H:%M:%S >> ${LOGVM}

echo "STARTED" > ${LOGALL}
date +%d.%m.%Y/%H:%M:%S >> ${LOGALL}
rsync -avvx --progress --no-whole-file --exclude "/media/*" --exclude "/indel/*" ${ALLORIG} ${DESTALL} >> ${LOGALL}
echo "FINISHED" >> ${LOGALL}
date +%d.%m.%Y/%H:%M:%S >> ${LOGALL}

sudo chmod +x /etc/rc0.d/K01backup그런 다음 실행 가능하게 만들기 위해 실행했습니다 . 처음에는 스크립트를 실행하는 데 약 한 시간이 걸렸고 모든 것이 순조롭게 진행되었습니다. 하지만 이제 로그 파일에서 스크립트가 시작된 것을 볼 수 있습니다(아마도다시 시작했다) 퇴근하고 한 시간쯤 지나니 이미 모든 파일이 최신 상태여서 실행에는 1분 정도 밖에 걸리지 않았습니다.

내가 뭘 잘못하고 있는지 아는 사람 있나요?

답변1

이 디렉토리의 추가 정보 파일에는 이 디렉토리의 스크립트가 정전 시(재부팅 시가 아님) 한 번만 호출된다는 내용이 나와 있습니다.

간단한 테스트 프로그램 사용

#!/bin/bash

LOG=/root/backup.log
date >> $LOG
echo $* >> $LOG

나는 어느 시점에서 프로그램이 실제로 두 번 호출되었다는 것을 알아차렸습니다. 한 번은 인수 없이, 한 번은 "stop" 인수를 사용하여 호출되었습니다. 그러나 나는 그것을 재현할 수 없습니다.

실제 호출 매개변수를 프로그램에 기록하고 $1스크립트 test 에도 기록하는 것이 좋습니다 stop.

이 프로그램을 삽입 backup하고 /etc/init.d이 스크립트에 대한 링크를 설정하는 것이 더 관용적이지만 /etc/rc0.d/K01backup이것이 어떤 방식으로든 작동에 영향을 주어서는 안 됩니다. 이러한 항목을 관리하는 모든 도구는 이러한 링크를 생성/삭제할 수 있습니다.

이 기본 스크립트를 시도한 결과 OP는 편집된 파일에 백업 파일이 있음을 발견했습니다. 해당 파일 /etc/rc0.d/K01backup~도 실행되었습니다. backup파일을 넣고 처음부터 연결하면 /etc/init.d/이런 일이 발생하지 않습니다(파일이 존재하든 없든 /etc/init.d/backup~).

관련 정보