라즈베리파이에서 크론탭을 이용한 주기적 백업 질문
글쓴이: Hubert Lee@Google / 작성시간: 수, 2019/09/18 - 8:33오후
http://aijames.blogspot.com/2015/02/sd-card.html
이 게시글을 보고 라즈베리파이에서 크론탭을 이용한 주기적 백업을 시도하고 있습니다.
위 게시글은 첫 째 주에는 풀 백업, 나머지 주에는 부분 백업을 하는데 어디서 그 차이가 나는지 모르겠습니다.
코드는 다음과 같습니다.
import os import sys import datetime base_path = '/mnt/hdd/rasp_backup/' backup_list = '' backup_file = '' backup_list_full = ['/home', '/etc', '/sys', '/lib', '/srv', '/sbin', '/bin', '/var', '/media', '/selinux', '/usr', '/opt'] backup_list_partial = ['/home', '/etc'] if datetime.datetime.now().day <= 7 or len(sys.argv) >= 2: backup_file = base_path + 'full_' + datetime.datetime.now().strftime('%y%m%d%H%M') + '.tar.gz' backup_list = backup_list_full os.system('rm -f full_*') else : backup_file = base_path + 'partial_' + datetime.datetime.now().strftime('%y%m%d%H%M') + '.tar.gz' backup_list = backup_list_partial os.system('rm -f partial_*') os.system('tar cvfz ' + backup_file + ' ' + ' '.join(backup_list))
여기서 datetime.datetime.now().day <= 7 or len(sys.argv) >= 2:가 첫째주와 나머지 주의 차이를 나타내는 부분일까요?
datetime.datetime.now().day가 7보다 작은건 항상 그럴테고(월화수목금토일 모두 7보다 작거나 같으니), 그러면 len(sys.argv)가 그 차이를 결정하는걸까요?
정말 모르겠습니다. ㅠ
Forums:
실행한 날자가 7일 보다 같거나 작을 경우 또는 실행
실행한 날자가 7일 보다 같거나 작을 경우 또는 실행 command argument 가 2개 이상이면 full backup. 을 하겠다는 내용이네요.
cronjob 을 매주 일요일에 실행 시킨다고 했으니, 아마도 첫번째 일요일이 7보다 작을 거라고 가정을 한 거고요. (검증은 하기 귀찮아서..) sys.argv 길이는 강제 full backup 을 하기 위하여 조건을 달아 놓은 것으로 보입니다.
https://docs.python.org/ko/3/library/datetime.html#datetime.datetime.day
https://dololak.tistory.com/437
매달 첫번째 일요일의 날짜는 7보다 클 수 없지요.
매달 첫번째 일요일의 날짜는 7보다 클 수 없지요.
일요일은 7일에 한 번씩 있으니까요.
아 그렇군요.
아 그렇군요.
그런데 sys.argv가 무엇을 말할까요? 어떤 변수를 어디서 가져오는지 모르겠습니다.
sys.argv
https://www.pythonforbeginners.com/system/python-sys-argv
읽어보면 도움될 겁니다.
세벌 https://sebuls.blogspot.kr/
답변 감사드립니다.
답변 감사드립니다.
제가 궁금한 것은 저 sys.argv가 어디서 넘어오는지가 궁금합니다.
매개변수를 뜻하는 것은 알겠는데...
크론탭을 통해서가 아니라, 커맨드로 실행시킬 때는 ./backup.py 만 이용해서 매개변수가 넘어가지 않습니다. backup.py는 넘어가도 option 1 option 2 과 같은 매개변수들이 안넘어갑니다. (아니면 제가 이해를 잘못했나봅니다.)
아니면 저게 크론탭의 매개변수가 넘어가는걸까요?
근데 크론탭은 그냥 주기적으로 심볼릭 링크되어 있는 파일을 실행시켜주는 역할 아닌지요?
크론탭에 매개변수까지 적혀 있으면야 그 매개변수가
크론탭에 매개변수까지 적혀 있으면야 그 매개변수가 넘어가겠죠. 지금 상태에서는 넘어가는 매개변수가 없으니 그냥 앞쪽 조건의 날짜만 따져서 풀/부분 백업이 결정날 거고.
예를 들어 오늘 날짜가 15일인데 내가 문득 "오늘 기분이 왠지 풀 백업을 하고 싶다" 이런 생각이 들면 그때 직접
이런 식으로 아무값이나 인자를 하나 더 주어 실행하면 if 에서 뒤쪽 조건에 만족하면서 풀 백업을 하게 되는 거죠.
근데 저런 식으로 "자주 변하는 디렉토리는 매주, 자주 변하지 않는 디렉토리는 한 달에 한 번" 이렇게 할 거면 차라리 tar 의 incremental backup 옵션을 써보시죠.
https://croky.tistory.com/entry/Tar를-이용한-서버-증분-백업
좋은 하루 되세요!
아 그렇군요! 그리고 좋은 방법을 알려주셔서
아 그렇군요! 그리고 좋은 방법을 알려주셔서 감사합니다.
공부해보겠습니다!!
datetime.datetime.now().day가
datetime.datetime.now().day
가 왜 요일을 나타낸다고 생각하시나요? 이건 날짜를 의미합니다.https://docs.python.org/3/library/datetime.html#datetime.datetime
매달 1일부터 7일까지, 즉 첫째 주에는 풀 백업, 나머지 날짜에는 부분 백업을 하겠네요.
len(sys.argv)
도 로직에 영향을 주는데, 이게 어떻게 들어오는지는 crontab에서 스크립트를 어떻게 실행하는지를 확인해야지요.답변 감사드립니다.
해결했습니다. argv에서 a가 빠졌었네요!
왜 sys.argv가 아니라 sys.rgv인가요?
왜 sys.argv가 아니라 sys.rgv인가요?
(거의) 항상 에러메시지에 답이 있습니다. 주의깊게 보세요.
감사합니다!
감사합니다!
댓글 달기