라즈베리파이에서 크론탭을 이용한 주기적 백업 질문

Hubert Lee@Google의 이미지

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)가 그 차이를 결정하는걸까요?

정말 모르겠습니다. ㅠ

김정균의 이미지

실행한 날자가 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일에 한 번씩 있으니까요.

Hubert Lee@Google의 이미지

아 그렇군요.
그런데 sys.argv가 무엇을 말할까요? 어떤 변수를 어디서 가져오는지 모르겠습니다.

세벌의 이미지

Hubert Lee@Google의 이미지

답변 감사드립니다.
제가 궁금한 것은 저 sys.argv가 어디서 넘어오는지가 궁금합니다.
매개변수를 뜻하는 것은 알겠는데...

크론탭을 통해서가 아니라, 커맨드로 실행시킬 때는 ./backup.py 만 이용해서 매개변수가 넘어가지 않습니다. backup.py는 넘어가도 option 1 option 2 과 같은 매개변수들이 안넘어갑니다. (아니면 제가 이해를 잘못했나봅니다.)
아니면 저게 크론탭의 매개변수가 넘어가는걸까요?
근데 크론탭은 그냥 주기적으로 심볼릭 링크되어 있는 파일을 실행시켜주는 역할 아닌지요?

raymundo의 이미지

크론탭에 매개변수까지 적혀 있으면야 그 매개변수가 넘어가겠죠. 지금 상태에서는 넘어가는 매개변수가 없으니 그냥 앞쪽 조건의 날짜만 따져서 풀/부분 백업이 결정날 거고.

예를 들어 오늘 날짜가 15일인데 내가 문득 "오늘 기분이 왠지 풀 백업을 하고 싶다" 이런 생각이 들면 그때 직접

$ python backup.py full

이런 식으로 아무값이나 인자를 하나 더 주어 실행하면 if 에서 뒤쪽 조건에 만족하면서 풀 백업을 하게 되는 거죠.

근데 저런 식으로 "자주 변하는 디렉토리는 매주, 자주 변하지 않는 디렉토리는 한 달에 한 번" 이렇게 할 거면 차라리 tar 의 incremental backup 옵션을 써보시죠.

https://croky.tistory.com/entry/Tar를-이용한-서버-증분-백업

좋은 하루 되세요!

Hubert Lee@Google의 이미지

아 그렇군요! 그리고 좋은 방법을 알려주셔서 감사합니다.

공부해보겠습니다!!

익명 사용자의 이미지

datetime.datetime.now().day가 왜 요일을 나타낸다고 생각하시나요? 이건 날짜를 의미합니다.

https://docs.python.org/3/library/datetime.html#datetime.datetime

매달 1일부터 7일까지, 즉 첫째 주에는 풀 백업, 나머지 날짜에는 부분 백업을 하겠네요.

len(sys.argv)도 로직에 영향을 주는데, 이게 어떻게 들어오는지는 crontab에서 스크립트를 어떻게 실행하는지를 확인해야지요.

Hubert Lee@Google의 이미지

해결했습니다. argv에서 a가 빠졌었네요!

익명 사용자의 이미지

왜 sys.argv가 아니라 sys.rgv인가요?

(거의) 항상 에러메시지에 답이 있습니다. 주의깊게 보세요.

Hubert Lee@Google의 이미지

감사합니다!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.