crontab 으로 스케쥴 잡 등록 시키기

python 과 crontab 을 잘 연결시키면 스케쥴 작업을 완벽하게 만들 수가 있습니다. 간단한 배치 작업들은 굳이 다른 시스템을 사용할 이유가 없습니다.

기본 editor 를 emacs 로 변경하기

$ export EDITOR=emacsclient

아무 설정을 하지 않으면 vi 로 설정되어 있습니다.

기본적인 기능

CRUD 에서 U 는 C 와 동일하니 기능을 살펴보기로 합니다.

입력 (Create)

$ crontab -e

보기 (Read)

$ crontab -l

지우기 (Delete)

$ crontab -d

주기 결정

*          *        *        *       *
분(0-59)  시간(0-23)  일(1-31)  월(1-12)   요일(0-7)

실제 예

* * * * * ls -la

인코딩 관련

crontab 으로 파이썬 스케쥴을 돌릴때 특히나 console 에 한글을 출력하는 경우에 에러가 자주 발생합니다. Unicode 에러 인데요. crontab 은 shell 환경을 가져오지 않기 때문에 발생합니다. 해결 방법은 의외로 간단합니다. crontab 에서 입력 할때 마치 쉘 환경 처럼 적어주면 끝입니다.

   PYTHONENCODING=utf-8
   LANG=ko_KR.UTF-8          
   0 * * * 1-5 source /Users/crazia/miniconda3/bin/activate /Users/crazia/miniconda3/envs/cr-mon/ && 
   /Users/crazia/miniconda3/envs/cr-mon/bin/python /Users/\
crazia/work/python-projects/cr_mon/manage.py stats >> /Users/crazia/work/stats.log 2>&1

miniconda 상에서 cr-mon 이라는 환경을 만들고 django style console 로 만들어서 실행시키고 로그를 남기는 예제 입니다.

민트 리눅스를 잘 쓰고 있었습니다. 그러다가 갑자기 로그인을 하는데 화면이 검게 나오고 아무것도 진행이 안되더군요. 다른일을 하는 중이였기 때문에 침착하게 기다렸습니다. 한시간이 지나도 역시 검게 되어 있는 형태더군요. (한시간은 마치 그렇게 느꼈다는 뜻입니다. 저는 개발자 답게 인내심이 많지가 않습니다 ㅋㅋ) 


그 검은 상태에서 마우스 오른쪽을 누르니 메뉴가 나오긴 하더군요. - 브라우져, 터미널 등등 - 이거 저거 다 눌러 보지만 별다르게 쓸만한 것은 없더군요. 


그중에서 'Terminal Emulator' 를 선택하면 터미널 창이 하나 나오는데 거기서 


sudo apt-get remove openbox 


를 입력해서 지워주고 다시 시작하면 정상 복구가 됩니다.  저와 같은 현상이 벌어진 분들에게 바치는 팁입니다. 

정말 예전 포스트 에서 민트 리눅스 (Mint Linux) 를 추천한 적이 있었습니다. 간만에 그 노트북이 생각나서 꺼내서 사용하니 OS 설치한지 오래되서 지원이 끊겼습니다. 민트 리눅스도 기반이 우분투(Ubuntu) 인지라 우분투의 지원주기랑 같습니다. 즉 우분투가 LTS (Long Term Support) 버젼이면 민트도 LTS 가 되는 것이지요. 따라서 우분투 LTS 버젼의 최근 것이 12.04 니까 민트도 거기에 해당하는 버젼이 민트 13 마야 (Mint Linux 13 Maya) 가 되는 것이지요. 

http://www.linuxmint.com/release.php?id=18

위 링크를 클릭하시면 민트 리눅스를 받을 수 있습니다.  저사양 노트북에는 씨나몬 (Cinnamon) 보다는 메이트 (Mate) 가 낫다고 하더군요. 기능성은 조금 떨어지지만 더 가볍다고 합니다. 그리고 제 빌어먹을 소니 노트북은 32비트 CPU 기 때문에 32 비트 버젼 Mate 를 설치해줍니다. 

다운로드 받은 iso 파일이 있다면 이제 이것을 USB 스틱에다 넣어서 부팅이 가능하도록 만들어 줘야 하는데 몇가지 방법이 있습니다. 그러나 제 경험으로는 몇가지 방법이 있다고는 하지만 되는 방법은 별로 없었습니다.

제 추천은 Universal-USB-Installer 를 이용하는 것을 추천드립니다.  


만약 윈도우에서 Linux 계열의 부팅이 가능한 USB 스틱을 만드는 경우라면 위의 프로그램을 이용하는 것이 가장 편했습니다.

그후에 시키는대로 대충 누르시면 설치가 됩니다. (민트 리눅스를 설치하는 방법은 여러군데서 찾을 수 있을 뿐더라 설치 자체도 쉽습니다)

설치후에 해야 할 일

사실은 이 부분이 더 중요합니다.  먼저 민트 리눅스 마야 (Maya) 는 LTS 인 12.04를 기반으로 하긴 하지만 이 버젼 자체가 옛날에 나온 것이기 때문에 소프트웨어 업데이트를 해줘야 합니다. 하지만 소프트웨어를 가져오는 소스 기반이 해외로 되어 있기 때문에 안그래도 시간이 걸리는 업데이트가 하루종일이 걸릴 수가 있습니다. 

1. 소스 레파지토리 (Source Repository) 한국으로 변경해주기 

$ sudo vi /etc/apt/sources.list


커맨드 라인에 위처럼 입력하시고 비밀번호를 입력하시면 나오는 상태에서

:1,$s/archive.ubuntu.com/ftp.daum.net/g


 로 입력하시면 병경이 됩니다. 그리고 

deb http://packages.medibuntu.org/ precise free non-free 



이 주소는 더 이상 사용되지 않는 것 같더군요. 원활한 진행을 위해서 맨 앞에 # 를 추가해서 막아줍니다. 

$ sudo apt-get update 



를 커맨드 라인에 입력하셔서 업데이트 해 줍니다.

그리고 왼쪽 하단의 'Menu' 버튼을 클릭하시고 '패키지 관리자'를 실행해 줍니다. (아마 한글이 안 깔린 상태라면 'Package Manager' 란 이름일 것입니다) 

 
이런게 뜨면  '설정' - '저장소' 를 눌러서 화면을 띄웁니다. 그러면 나오는 화면에서 



 위처럼 클릭하시고 나온 화면에서 



이렇게 선택하시고 '서버 선택' 버튼을 클릭하시면 됩니다. 그리고 다시 '소프트웨어 소스' 화면에서 두번째 '기타 소프트웨어'탭을 클릭하셔서 http://packages.medibuntu.org 항목을 체크 해제 하거나 지워주세요. 


위 그림처럼 해주면 되지만 실은 이 부분은 커맨드 라인에서 해주는 작업하고 동일합니다. 만약 커맨드 라인 작업을 먼저 하셨다면 이 부분은 필요 없을  수도 있습니다. 

여기까지 마치셨으면 오른쪽 하단의 방패 마크를 클릭하셔서 나오는 화면에서 


 '새로 고침'을 눌러서 저장소 업데이트 해주고 위 그림처럼 '업데이트 설치' 를 눌러서 긴 시간동안 설치해주시면 최신 소프트웨어로 업데이트 됩니다. 

2. 한글 설정

아직 한글이 제대로 설정이 안되는 경향이 있습니다. 이것은 1번 작업을 했다면 손 쉽게 해결할 수가 있습니다.  왼쪽 하단의 'Menu' 버튼을 클릭하시고 '제어판'을 클릭하시면 (한글 디스플레이 표기 전이라면 Control Pannel 일 것입니다. 아마도..) 


에서 위 그림과 같이 'Language Support' 를 클릭하셔서 나오는 화면에서 무엇인가를 설치하겠냐고 물어보면 설치한다고 대답하시고 나오는 화면에서 

 


위 그림 처럼  저 버튼 (다시 말씀드리지만 한글 디스플레이가 안되는 상황이면 영어 일 수가 있습니다) 을 클릭하셔서 나온 화면에서 

 
위 그림처럼 선택해서 (제 경우에는 영어 표시였고 Korean 을 선택해 줬습니다) '바뀐 내용 적용' 을 클릭해서 적용하면 됩니다.

여기까지면 한글 언어 팩이 설정된 것이고 이제 한글 입력기를 설치할 차례 입니다. 한글 입력기는 우분투에서 쓰이는 기본인 iBus 가 민트에서는 제대로 동작 안됐던 기억이 있습니다. 아마 소소한 버그였는데 고쳐졌을 지도 모르지만 한번 디인 상태라 모험하긴 싫더군요. 따라서 나비 (nabi) 를 설치해 주기로 합니다.

$ sudo apt-get install nabi



라는 마법의 키워드 한번만 입력해 주면 설치 완료 입니다.  한글이 적용되는 것을 확인하기 위해서 'Log out' 했다가 다시 'Log in' 하면 적용 된 모습을 확인 하실 수 있습니다. 

참고로 이 포스트는 그 설치된 민트 리눅스 마야 버젼에서 작성되었습니다. (화면 캡쳐도 물론 입니다. 이 버젼에 포함된 화면 캡쳐  프로그램 정말 쓸만하군요. @.@ )  

우분투 13.04 버젼을 설치하고 나니 기존에 12.xx 버젼에서 발생했던 문제가 그대로 있더군요. 기존의 문제는 xrdp 를 설치하고 외부에서 원격 데스크탑 (Remote Desktop)을 이용해서 접속해서 작업을 할 때 

'd' 키를 누르면 모든 화면이 태스크바로 사라지면서 바탕화면이 나오는 문제 입니다.  



 이거 때문에 작업이 힘듭니다. ( cd , sudo 등 d 자 들어가는 유닉스 명령이 얼마나 많습니까? ㅎㅎ) 해결 방법을 찾아내서 정리해서 올립니다. 

1. ccsm ( compizconfig-settings-manager ) 을 설치해 줍니다.
 

$ sudo apt-get install  compizconfig-settings-manager



2. ccsm 을 실행시켜 줍니다.
 

$ ccsm



3. 왼쪽 탭에 '일반 (General)' 을 선택하시고 그 후 오른쪽 패널의 '일반 설정정 (General Options)' 를 클릭합니다.

4. '키 바로가기 (Key bindings)'  를 클릭하면 나오는 그럴듯한 메뉴를 골라줍니다. '바탕화면 보기 (Show Desktop)' 제 경우에는 이녀석이더군요.

5. 그림에 있는 연필 비슷하게 생긴것을 클릭해 주면 '<Control><Super>d' 가 나오는 것을 찾아서 설정을 지워주면 됩니다.  


 
예전 포스트 에서 해결하는 방법을 올렸지만 unity-2d 랑 gnome-classic 등이 동작 안하는 현상이 13.04에서 발견됐습니다. 새로운 방법을 올리겠습니다. 

1. 기존에 쓰여져 있던 .xsession 을 지웁니다. (만약 존재한다면)  

2. 다음과 같이 차례로 입력합니다.

sudo apt-get install gnome-session-fallback
$ echo "gnome-session --session=gnome-fallback" > .xsession
$ sudo /etc/init.d/xrdp restart 



unity-2d 가 gnome-fallback 으로 바꼈다는 소리를 들었습니다. (카더라 통신입니다만..)
 
제가 사용하고 있는 만화책 Viewer 는 JJComics 입니다. 일단 무료 이고요. 여러 코믹스 뷰어를 설치해 봤지만 이 어플만한 녀석이 없더군요.

그런데 TIF 파일을 못 읽는 안타까움이 있습니다. 하지만 Linux 사용자라면 편하게 이미지 파일 형식을 변환할 수 있는 툴이 들어 있습니다. convert 라는 툴인데요. Command Line 에서 편하게 파일을 변경할 수가 있습니다.

TIF -> GIF 로 바꿔서 다시 압축을 해주면 JJComics 에서 볼 수가 있습니다.

$ find . -type f -name '*.TIF' | while read filename; do echo "converting ${filename}"; convert "${filename}" "`echo "${filename}" | sed -e 's/\.TIF$/\.GIF/'`"; done


조금 설명을 부연하자면

1. 현재 디렉토리 ( . ) 에서 확장자가 TIF 인 파일을 찾습니다.

2. 그 각각을 filename 으로 인자로 받아들입니다.
   - while read filename 으로 가능합니다.

3.  간단한 변환 메시지를 출력하고
  -  converting ${filename} 을 통해서 그게 가능합니다

4. 실제로 convert 명령을 이용해서 변환을 가해 줍니다.
  - convert 001.TIF 001.GIF 와 같은 방식으로 변환이 가능합니다.
  - convert "${filename} 은 원래 파일 이름 (001.TIF)
  - "`echo "${filename}" | sed -e 's/\.TIF$/\.GIF/'`" 은 바껴질 파일 (001.GIF) 를 의미합니다.



Mint 를 사용하다보면 오른쪽 상단에 있는 "(금) 17:09" 이렇게 시간이 쓰여져 있는 것을 보셨을 것입니다. 그것을 살짝 눌러보면 달력과 일정이 쭈르륵 나옵니다. 여기에 표시가 나오는 것을 보니 어딘가(?) 에서 설정해 주면 편하게 일정이 나올 것 같은 분위깁니다. 그래서 아래쪽에 있는 "달력 열기" 버튼을 클릭해 주면 에볼루션이 설치가 안되어 있다고 에러 메시지가 발생할 것입니다. 감히!! 데비안 패키지를 어떻게 보고!!

$ sudo apt-get install evolution


이러면 바로 설치가 됐을 것입니다. 그리고 아까와 같이 '달력 열기'를 클릭하면 에볼루션 (Evolution) 어플이 실행됩니다. 에볼루션에 관한 설정은 쉽게 알아볼 수가 있을테니 여기서 구글 캘린더랑 연동하는 법을 알아보기로 하겠습니다.

에볼루션에서 '새로 만들기' 옆에 있는 '아래로 향한 화살표'(보통 콤보 버튼이라고 합니다)   버튼을 클릭해서 '달력' 메뉴를 선택합니다. 그러면 다음과 같이 나오는데





'종류'를 '구글' 로 선택하시고 '사용자이름' 을 gmail 아이디로 적어 줍니다.

이렇게 하고 '적용' 하시면 동기화 끝입니다. 에볼루션에서 일정을 적어주면 바로 바로  오른쪽 상단 태스크바에 적용이 되며, 안드로이드 폰에도 바로 적용이 됩니다.

참고로 에볼루션 버젼은



입니다. 예전 버젼에서는 구글-캘린더가 읽기 전용으로만 동작했습니다.


일단 제가 쓰고 있는 블루투스 동글이는


이런 모양입니다. 맥북에 부트캠프를 설치하면 절대 안 잡히는 그 문제의 동글이 인데, 리눅스 민트에서는 한방에 잡히더군요.

먼저 동글이를 usb 에 꼽아주고요. (전 모니터랑 연결 시켜둬서 모니터에 있는 usb 에 꼽아뒀습니다)

$ sudo apt-get install bluez-utils


이걸로 관련 어플들을 설치해주고 ,

$ sudo shutdown -r now


로 리부팅 해줍니다. (어쩐 일인지 바로 설치하고는 안 잡히더군요. ) 그리고 다음에 실행해 준 게 영향을 미쳤는지 모르겠습니다만.. 아마 안 미쳤을 것 같지만 혹시나 모르는 분들은 한 번 해보시는 게 좋을 듯 합니다.

$ sudo /etc/init.d/bluetooth restart

이후 오른쪽 상단에 있는 블루투스 모양의 아이콘에 오른쪽을 클릭하셔서 '새 장치 준비' 로 페어링을 해주시면 됩니다.


그리고 대부분의 블루투스가 그렇겠지만 헤드셋/헤드폰 이 합쳐진 버젼 이라면 꼭 소리 설정 부분에서


프로파일을 스테레오로 바꾸어 주셔야 합니다. 제꺼는 'High Fidelity Playback' 이더군요.



저는 터미널 (Terminal) 에서 작업을 많이 합니다. 민트를 깔아보고 놀랐던 이유가 터미널 프로그램이 이뻐서 였습니다. 그래서 기본 설정이 '흰 바탕에 검은색 글씨' 였는데 바로 '검은색 바탕에 회색 글씨' 로 바꾸어 줬습니다. 역시 검은색이 마음이 안정된다고나 할까요?

그랬는데 한글 언어팩을 설치하고 났더니만 터미널 상에서 한글이 정말 보기 싫게 변하더군요. 그래서 나눔고딕 폰트를 설치해주고 (저번 아티클 참조)

/etc/fonts/conf.d/69-language-selector-ko-kr.conf

를 열어서


	
    
		
			monospace
		
		
			Dejavu Sans Mono
			NanumGothic
		
	

위와 같이 추가해 주면 됩니다.  (정확히는 이미 되어 있는 것을 변경해 주는 것입니다)


그러면 이렇게 나눔고딕 형태로 한글 폰트가 바뀌게 됩니다.


민트 에서 집에 있는 서버에 붙을 원격 데스크 탑 클라이언트를 찾던 와중에 설치해 봤는데 아주 만족 스러워서 이렇게 추천합니다. MS 환경하에서 제공되는 RDC (Remote Desktop Client)만 쓰다가 사용하니 속도가 아주 빠르고 좋습니다.

설치 방법은

$ sudo apt-get install remmina

추천 설명은 여기서 봤습니다. http://community.linuxmint.com/software/view/remmina


+ Recent posts