[Linux] systemd 설정하기 (uwsgi, celery, celery beat)

[systemd 명령어] systemctl start service 서비스 시작 systemctl stop service 서비스 종료 systemctl restart service 서비스 재시작 systemctl status service 서비스 상태 systemctl enable service 서비스를 서버 기동 시 자동으로 시작되도록 설정 systemctl disable service 서비스를 서버 기동 시 자동으로 시작되지 않도록 설정 [uwsgi 서비스 등록하기] $ cd /etc/systemd/system $ sudo vi uwsgi.service 아래 내용 추가 (빨간색은 해당 프로젝트에 맞게 변경) [Unit] Description=uWSGI After=syslog.target [Service] ExecStart=/home/ubuntu/.virtualenvs/ lotto /bin/uwsgi --ini /home/ubuntu/ lotto / lotto _uwsgi.ini  # Requires systemd version 211 or newer RuntimeDirectory=uwsgi Restart=always KillSignal=SIGQUIT Type=notify StandardError=syslog NotifyAccess=all [Install] WantedBy=multi-user.target $  ls -al uwsgi.service 권한점검 -rw-r--r-- 1 root root 335 Jan 31 15:04 uwsgi.service [celery,  celery beat] celery와 celerybeat는 설치 시 disable되어져 있으므로 아래의 명령어로 enable한다. sudo systemctl enable celery sudo systemctl enable celery beat 실행 시 pid 관련 에러가 나면 아래 사항을 점검 /var/run/celery 디렉토가 있는지 확인 없으면 /var/run/c...

[Linux] 프로세스 관리 개요 및 역사

  웹사이트 개발을 완료하고 서비스할 프로덕션(production) 서버에 배치(deploy)할 때 고민하게 되는 문제 중 하나가 서버에서 띄워야 하는 여러 가지 프로세스들을 어떻게 띄울 것인가 하는 문제다. 프로세스가 죽으면 다시 띄우는 것도 물론 필요하다.   monit 이나   supervisord ,   god   등은 이런 목적으로 나온 것이다(몇 가지 부가적인 목적이 더 있긴 하다). 하지만 이건 OS에 대한 이해 부족에서 나온 것이다. 프로세스 관리는 OS의 핵심적인 기반이 되는 기능이다. 본 연구에서는 왜 monit 등이 잘못된 선택인지, 올바른 방법은 무엇인지에 대해 다룰 것이다. 프로세스 No. 1 Init 올바른 방법은 OS의  init  시스템, 혹은 그와 유사한 대안 시스템을 사용하는 것이다. init은 유닉스에서 부팅될 때 첫번째로 만들어지는 프로세스다. 그래서 프로세스 번호가 1이고, 이후의 모든 프로세스는 init 프로세스의 자손이 되고, 시스템이 부팅될 때 뜨는 모든 프로세스는 init이 띄우게 된다. respawn이 설정된 프로세스는 죽었을 때 다시 띄우는 역할도 한다. 그러니 서버에 프로세스를 띄워야 한다면 init에 맡기는 것이 자연스럽지 않겠는가. 물론 init 시스템은 낡고 문제점이 있지만,  그건 부팅 과정의 문제점이 크고, 프로세스를 관리하는 데는 별 문제가 없다. 다만, 조금 번거롭긴 하다. 사용법은  Managing Linux daemons with init scripts 를 참조하라. 보면 알겠지만 좀 귀찮다. 하지만, 이제 이 init 시스템은 역사 속으로 사라질 예정이다. 아니, 많은 리눅스 배포판에서 이미 사라졌다. 우분투는 이미 수년 전 init을  upstart 로 대체했고, 다른 배포판들은  systemd 로 방향을 잡았으며 최근에 우분투도 systemd에 합류하기로 했다. 그러니까, 미래는 systemd에...

[Ubuntu] swapfile 생성 및 삭제

이미지
  PC의 메모리는 일반적으로 8~32 GB 사이를 사용합니다. 메모리가 부족한 경우 메모리의 일부 내용을 디스크로 스왑(Swap)하게 됩니다. Windows의 가상 메모리와 같이 디스크의 일부를 메모리처럼 사용하게 됩니다. 여기서는 스왑 중 스왑 파일을 생성하는 방법과 삭제 방법을 알아보겠습니다.   1. 스왑 파일/파티션 존재 여부 확인 스왑 파일 생성 전에 스왑 파일이나 스왑 파티션이 존재하는지 먼저 확인합니다. sudo free -m 그리고 아래의 명령어를 입력해서 swap 관련한 내용이 보이지 않으면 스왑이 설정되지 않은 것입니다. sudo swapon -s 만약 두 명령어 모두 swap 관련이 보이지 않으면 아래 명령어로 생성합니다.   2. 스왑 파일(swapfile) 생성 먼저 스왑 용도로 사용할 파일을  swapfile 이라는 이름으로 생성합니다. sudo fallocate -l 2G /swapfile 명령어의 2G는 2GB를 의미하며 원하는 용량을 입력하면 됩니다. 루트 디렉터리에 swapfile 파일이 생성됩니다. swapfile 다음으로 생성된 파일의 권한을 수정합니다. sudo chmod 600 /swapfile 이제 해당 파일이 스왑으로 동작하도록 만들어줍니다. sudo mkswap /swapfile 아래와 같은 내용이 표시됩니다. mkswap 마지막으로 아래 명령어를 입력해서 스왑을 활성화시킵니다. sudo swapon /swapfile 이것으로 스왑이 생성되며 재부팅 이후에도 계속 사용하려면 /etc/fstab 파일을 수정합니다. sudo nano /etc/fstab 파일 하단에 아래와 같은 내용을 추가하면 됩니다. /swapfile swap swap defaults 0 0 재부팅 이후에도 swapfile이 정상적으로 동작하는지 확인하면 설정이 완료됩니다.   3. 스왑 파일(swapfile) 삭제 스왑 파일은 한 번 설정하면 굳이 삭제할 필요는 없지만 삭제 방법은 다음과 같습니다. 먼저 ...

[Ubuntu] kswapd0 100% 문제

http://aodis.egloos.com/5964233

[Pandas] df for loop 속도 개선

이미지
  Pandas 에서 반복을 효율적으로 처리하는 방법 Pandas 를 통해 데이터 프로세싱을 할 때 종종 해야할일은 행에 반복적으로 접근을 하면서 그 값을 조작하는 일이다. 예를 들어, missing value 가 0 으로 코딩이 되어있는데, 이를 다른 값으로 바꾸고 싶을 경우 또는 A 컬럼의 값이 missing 일 때, B 컬럼의 값을 수정하고 싶은 경우 등이 있다. 이러한 작업을 하기 위해서는 모든 행을 조회 하면서 값을 조회하고 수정하는 일이 필요하다. 이번 포스팅에서는 이러한 반복작업이 필요한 상황에서 어떤 방법이 가장 효율적일지에 대해 정리해보려고한다. 사용할 데이터 diabetes.csv 1) pd.iterrows() 가장 기본적이고 많이 사용하는 방법이 iterrows 함수를 이용하는 것이다. 하지만 iterrows 함수는 다른 방법에 비해 느린 편이다.  import pandas as pd import numpy as np import matplotlib . pyplot as plt import seaborn as sns % matplotlib inline diabetes = pd . read_csv ( "diabetes.csv" ) diabetes . head ( ) Pregnancies Glucose BloodPressure SkinThickness Insulin BMI DiabetesPedigreeFunction Age Outcome 0 6 148 72 35 0 33.6 0.627 50 1 1 1 85 66 29 0 26.6 0.351 31 0 2 8 183 64 0 0 23.3 0.672 32 1 3 1 89 66 23 94 28.1 0.167 21 0 4 0 137 40 35 168 43.1 2.288 33 1 missing value 가 0 으로 코딩이 되어있는데, 이를 nan 으로 바꾸는 코드를 iterrows 를 이용해서 짜보자.  def fix_mi...