supervisor로 daemonize하기

Linux를 사용하다면 보면 프로세스를 데모나이즈(daemonize)해야 하는 일이 생깁니다.

작성한 스크립트나 실행파일 등을 대몬으로 돌려야 하는 경우를 말하는 것입니다.

데몬은 백그라운드로 실행하고 세션을 종료해도 멈추지 않고 계속 작동하는 프로세스를 말합니다.

프로세스 –> 백그라운드 –> 코맨드를 따로 줄때까지 안죽음

일반 프로그램을 위와 같이 만들어 주는 것을 대모나이즈라고 합니다.

데모나이즈 몇가지 방법

데모나이즈는 보통 shell script를 하나 작성해서 실행, 종료를 하게 만듭니다. 이때 대몬이 되는 프로세스가 pid 파일을 만들도록 해야 하고 종료시킬 때 pid를 찾아서 종료하고 재실행하고 하는 것들을 만들어줘야 합니다.

이게 해보면 매우 귀찮은 일입니다.

init.d 스크립트를 만들기

inin.d 스크립트를 작성하는 것은 학습 장벽이 있습니다.
이 글에서는 설명하지 않습니다.

systemd를 사용하기

systemd를 사용해서 간단한 설정 코드를 작성하면 쉽게 대모나이즈 할 수 있습니다만 systemd가 없는 환경도 있습니다.
역시 이 글에서는 설명하지 않습니다.

supervisord를 사용하기

supervisord는 python으로 만든 프로세스를 대모나이즈 해주는 유틸리티입니다.
이 글에서 설명하려고 하는 것입니다.

supervisord 설치하기

supervisord는 두가지 방법으로 설치할 수 있습니다.

apt를 이용해서 설치
apt install supervisor

조금 낮은 버전이 설치될 수 있습니다. 버전에 따라서 버그가 있어서 문제가 있을 수 있습니다.

python pip를 이용해서 설치

python으로 제작했기 때문에 pip로 설치가 가능합니다.

sudo pip3 install supervisor

이렇게 설치하면 supervisor의 설치된 경로가 apt로 설치했을 때와 다르고 초기 설정 파일이 없거나 하는 문제가 있을 수 있지만 최신 버전이 설치되는 장점이 있습니다.

설치되는 경로는 이렇습니다.

/usr/local/bin/supervisord

설정 파일 경로

설정 파일의 경로는 아래의 디렉토리이고 이 디렉토리에 형식을 맞춰서 파일을 작성해주면 됩니다.
여러 개 만들어서 넣을 수 있습니다.

/etc/supervisor/conf.d

다음 내용은 supervisord를 사용한 대모나이즈 설정의 예입니다.

jupyterhub를 대모나이즈 하는 설정입니다.

[program:jupyterhub]
user=root
command=/usr/bin/python3.8 -m jupyterhub --no-ssl -f /etc/jupyterhub/jupyterhub_config.py
directory=/srv/jupyterhub
autostart=true
autorestart=true
startretries=3
exitcodes=0,2
stopsignal=TERM
redirect_stderr=true
stdout_logfile=/var/log/jupyterhub.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB

사용할 때 몇가지 삽질을 방지하기 위한 요령이 있지만 이 글에서는 생략하겠습니다. 글이 너무 길어집니다.

여기까지입니다. 질문, 오류 지적은 언제나 환영입니다.

워드프레스에서 “업로드한 파일은 php.ini의 upload_max_filesize에 지정한 크기를 초과하였습니다.” 오류

워드프레스에서 업로드를 할 때 파일이 업로드 할 파일의 사이즈가 크면 다음과 같은 에러 메세지가 나오는 것을 볼 수 있습니다.

업로드한 파일은 php.ini의 upload_max_filesize에 지정한 크기를 초과하였습니다.

당연한 것이지만 워드프레스의 문제가 아니라 PHP설정의 문제입니다. PHP 설정에는 업로드할 파일의 사이즈가 기본 2Mb로 제한되어 있습니다. 이 설정을 변경해 주어야 합니다.

R로 블로그 만들기 – blogdown

blogdown 패키지를 이용해서 돈들이지 않고 블로그 사이트를 만드는 것을 소개합니다. 매우 쉽습니다.

배경 소개

Reproducible Research (재현가능 연구)라는 것이 대두되면서 기술 문서를 공개할 때 소스코드, 문서자체의 원본, 데이터까지 제공해서 누구나 검증할 수 있게 투명하게 하는 것이 시작되었습니다.

이것은 거창하게 말하면 기술, 연구의 윤리와도 관련이 있지만 여기서 자세히 설명하지는 않을께요.

R로 블로그 또는 위키를 만드는 것은 오래된 유행입니다. 하지만 여전히 많은 사람들이 데이터과학 블로그, 데이터분석 블로그, 과학 기술 블로그를 R로 작성하고 있습니다.

처음에는 Jekyll과 같은 연동형 툴이 유행했지만 지금은 R과 Rstudio만을 이용해서 블로그를 생성하고 배포하는 방식으로 발전했습니다.

간단한 개념 설명

한줄 요약

blogdown 패키지를 사용하면 스태틱 블로그를 생성해서 무료로 github에 블로그 사이트를 만들 수 있습니다.

세줄 요약

  • Blogdonw을 사용하면 Rmarkdown (Markdown + R의 코드연동 지원)으로 작성된 문서로 쉽게 블로그, 위키 등을 만들 수 있습니다.
  • workdpress나 dokuwiki, tistory 같은 백엔드가 따로 더 필요한 방식이 아니고 html 파일을 생성한 뒤에 그 결과물을 배포합니다. 이것을 스태틱 블로그(static blog)라고 합니다.
  • 스태픽 블로그는 github에서 지원하는 웹서비스를 사용해서 {자기의 githubid}.github.io 와 같은 도메인으로 무료로 블로그를 서비스할 수 있습니다. 그리고 도메인을 별도로 구매하면 github에 도메인을 붙여서 서비스할 수 있습니다. https://r-visualization.com 도 그렇게 제공하고 있는 것입니다.

순서 설명

  1. Rstudio를 실행한 뒤에 blogdown을 설치합니다. 이미 설치되었으면 통과.
  2. Blogdown 프로젝트를 하나 생성합니다. 생성할 때 테마를 선택해야 하는데 기본 테마를 사용해도 되고 테마를 고르고 시작해도 됩니다.
  3. 프로젝트가 생성되면서 파일이 몇개 생성됩니다. 수정, 추가를 해서 블로그의 내용물을 채웁니다.
  4. Rstudio의 Addons 메뉴를 눌러서 “Serve Site”를 선택하면 “Viewer”창에 생성된 블로그가 보입니다.
  5. 생성된 파일중에 index.html을 웹브라우저로 열어도 됩니다.

순서 설명 스크린샷

그림보고 따라 하시면 되요.

패키지 설치

install.packages("blogdown")

새 프로젝트 만들기

프로젝트 종류에서 “Website using Blogdown”을 선택

디렉토리 이름과 프로젝트 이름 입력

index.Rmd 파일과 content 폴더가 생긴것을 확인

Addons에서 Serve Site를 선택해서 사이트 빌드

내용 수정해서 블로그 완성하기

테마

blogdown은 hugo의 테마를 이용합니다. 아래 사이트를 방문해서 테마를 고르면 됩니다. 예쁜 것 많습니다.

프로젝트를 생성할 때 선택할 수도 있고 다운로드 받은 후에 theme 폴더에 넣고 설정을 변경해주면 됩니다.

https://themes.gohugo.io/

github 에 push 할때 인증창 안뜨게 하기

github에 있는 레파지토리를 클론할 때 레파지토리 주소에 사용자 아이디와 패쓰워드를 넣어두면 pull이나 push가 인증을 한다거나 매번 비밀번호를 물어본다거나 하는 일이 없어져서 편해집니다.

방법은
레파지토리에 주소에 사용자 아이디 패쓰워드 추가하면 됩니다.

특히 Github에 커밋할때마다 비밀번호를 물어보거나 인증을 했는데도 다음번에 또 물어보거나 하는 현상을 없앨 수 있습니다.

방법은 이렇습니다.

클로닝(cloning)할 것헙 레파지토리(repository) 주소

https://github.com/microsoft/vscode.git

위의 주소를 고쳐서 이렇게 해줍니다.

https://사용자아이디:사용자패쓰워드@github.com/microsoft/vscode.git

github.com앞에 @를 붙이고 그 앞에 사용자아이디 그리고 콜론 사용자 패쓰워드를 입력하면 됩니다.

패쓰워드가 드러나게 되니까 이 주소가 유출되지 않게 해야 합니다.

비밀번호에 @가 포함된 경우 해결 방법

비밀번호에 @가 있으면 github.com 앞의 구분자 @와 충돌합니다.

이때는 @를 %40으로 바꾸면 됩니다. 예를 들어

사용자아이디: user

비밀번호: pass!@#

라면

https://user:pass!%40#@github.com/microsoft/vscode.git

이 됩니다.

비밀번호가 노출되는 것이 싫어요. 대신 토큰 사용하기

https를 사용하기 때문에 네트워크에서 비밀번호가 새나갈 위험은 없습니다만 그래도 비밀번호를 그대로 적어서 저장하는 것은 위험합니다.

비밀번호를 적는 것이 걱정된다면 github에서 토큰을 받아서 비민번호대신 넣어줘도 됩니다. 자신의 토큰은 깃헙에서 받을 수 있습니다.

토큰 메뉴는 Settings -> Developers setting 에 있습니다.

참고

https://stackoverflow.com/questions/6172719/escape-character-in-git-proxy-password

Python3.9 Ubuntu 18.04에 설치하기

Python 최신 버전을 오래된 우분투 배포판에 설치하는 것은 항상 문제가 있었습니다. 그런데 18.04에서 Python 3.9를 설치하는 것은 버전에 비해서 설치하기가 쉬워졌습니다.
명령어 몇개로 쉽게 설치가 가능합니다.

커스텀 사용자 레파지토리를 추가

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update

설치

apt install python3.9

패키지 목록을 읽는 중입니다...
완료<br>의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
다음의 추가 패키지가 설치될 것입니다 :
libpython3.9-minimal libpython3.9-stdlib python3.9-minimal
    제안하는 패키지:
      python3.9-venv python3.9-doc binfmt-support
    다음 새 패키지를 설치할 것입니다:
   libpython3.9-minimal libpython3.9-stdlib python3.9 python3.9-minimal
    0개 업그레이드, 4개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
    4,833 k바이트 아카이브를 받아야 합니다.
    이 작업 후 18.9 M바이트의 디스크 공간을 더 사용하게 됩니다.
    계속 하시겠습니까? [Y/n] y

확인하기

python3.9 --version
Python 3.9.1

tqdm 파이썬 텍스트 프로그레스 바 패키지, Python progress bar

tqdm이라는 것이 있습니다.

터미널의 텍스브 모드에서 간단하게 특수기호를 이용해서 프로그레스파를 반들어주는 것을 볼 수 있습니다.

파이썬 패키지 중에 tqdm이라는 것이 있는데 tqdm은 터미널커맨드도 지원하고 파이썬 코드내에서도 쓸 수 있습니다.

쉽고 편하고 깔끔합니다. 그림을 보세요.

Screenshot

자세한 내용은 tqdm의 github을 참고하세요.

https://github.com/tqdm/tqdm