분류 전체보기 1191

[Shell Script] 대화형 VS 비대화형 쉘

쉘 실행 환경 Shell이 실행되는 환경은 크게 두 가지로 구분할 수 있다. 대화형 (Interactive) : 프롬포트를 통해 사용자로부터 직접 명령을 입력받아 실행한다. 비대화형 (Non-Interactive) : 스크립트 파일 등을 실행한다. history, alias, job control과 같은 기능은 기본적으로 대화형 쉘에서 사용하기 위한 기능이므로 비대화형 쉘에서는 비활성화된다. 쉘 실행 환경 확인 아래 명령을 통해 실행 중인 쉘이 대화형인지, 비대화형인지 확인할 수 있다. case $- in *i*) echo interactive shell ;; *) echo non-interactive shell ;; esac set 명령에 의해 설정된 option flags를 저장하고 있는 $- 변수의..

Linux/Shell Script 2023.09.13

[Airflow] celery control - Celery Worker 원격 제어

개요 일반적으로 Airflow Celery Worker는 워커 프로세스를 실행한 서버에서 제어할 수 있다. 하지만 필요에 따라 원격으로 제어해야 하는 경우가 생기는데, 이런 경우에는 Celery CLI를 이용할 수 있다. celery control celery CLI 중 control 명령은 worker를 원격 제어하는 기능을 제공한다. Celery Worker 가이드에서 확인할 수 있는 명령 대부분은 control 명령을 통해 원격으로 제어할 수 있는 것 같다. celery control [OPTIONS] {revoke|revoke_by_stamped_headers|terminate|rate_limit| time_limit|election|enable_events|disable_events|heartb..

Apache Airflow 2023.09.12

[프로그래머스] 다음 큰 숫자

문제 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12911 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의한다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 개수가 같다. 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수이다. 예를 들어 78(1001110)의 다음 큰 숫자는 83(1010011)입니다. 자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 반환하는 함수를 작성하라. 접근 자연수 n을 이진수로 변환한 뒤, 덧셈 연산에 의해 자리값이 01에서 10으로 바뀌는 지점을 찾는다. 남은 오른쪽 자리값은..

Algorithm 2023.09.11

[Airflow] OS 업그레이드 작업 기록 - 서비스 이관

개요 2023.08.29 - [Airflow] OS 업그레이드 작업 기록 - 서비스 검증 환경 구성 고민 2023.09.04 - [Airflow] OS 업그레이드 작업 기록 - 서비스 검증 위 두 개 글에서 Airflow OS 업그레이드 작업 중 서비스 계정의 UID:GID 변경을 위한 검증 환경을 어떻게 구성할지, 그리고 서비스 검증 방법에 대해 고민하고 진행한 내용을 정리했다. 이 글은 서비스 검증까지 완료한 상태에서 서비스 이관을 위해 고민했던 점을 적어둔다. 이슈 사항 현재 구성도는 대략 아래 사진과 같다. 인스턴스에 _NEW가 붙은 리소스가 신규 OS 서버이다. 그리고 작업하고 있는 Airflow는 CeleryExecutor를 사용하는 만큼 Worker를 scalable 하게 사용한다. 보통 A..

[AWS] SQS/S3 Event - Unable to validate the following destination configurations

현상 AWS S3 Event를 사용해 S3 버킷에 객체가 생성되면 SQS로 이벤트 알림을 보내도록 연동하고 있다. 그런데 새 S3 이벤트를 설정하려고 했더니 아래와 같은 오류 메시지가 발생하면서 이벤트 설정이 완료되지 않았다. 설정값을 잘못 지정했나 싶었으나 기존에 잘 동작하고 있는 S3 Event도 편집이 되지 않는 이상한 상태였다. 원인 에러 메시지로 구글링을 해보면 대개 S3와 SQS의 액세스 정책이 원인으로 보인다. 하지만 이 글의 경우, 새로 정책을 설정하는 사례가 아녔기 때문에 권한 및 정책 문제는 없었다. 알아보니 S3 버킷에 등록된 S3 이벤트 중 전달 대상으로 설정된 SQS가 실제로는 존재하지 않으면, 해당 S3 버킷에 등록된 모든 S3 이벤트를 수정할 수 없고 새로 S3 이벤트를 생성할..

AWS 2023.09.07

[Python] re - 정규표현식 일치 부분을 대문자로 변환하기

개요 정규표현식과 일치한 문자열은 대문자로 변환하고자 한다. 정규표현식에 대소문자 변환 기능을 가진 메타문자 \u, \U, \l, \L 등이 존재하지만, Python에서는 유니코드 패턴으로 인식되어 동작하지 않는 것 같다. 대안을 적어둔다. 방법 검색할 정규식 패턴에 그룹화를 사용하여, lamdba를 이용해 해당 그룹에 대해 upper 함수를 적용하면 된다. 굳이 lambda를 사용하지 않고 대문자 변환 함수를 정의하여 re.sub의 repl 매개변수로 넘겨도 된다. 아래는 소문자로 시작하거나, 공백과 소문자 조합인 문자를 대문자로 변환하는 코드이다. import re def Jaden_Case(s): return re.sub(r'(^|\b)([a-z])', lambda x: x.group().upper..

Python 2023.09.06

[Airflow] Celery worker의 queue 삭제 시 프로세스 종료 여부

개요 서비스 운영을 하다 보면 예기치 않은 이유로 프로세스가 종료되는 경우가 있다. 그럴 때를 대비해서 프로세스의 실행 상태를 확인하고, 실행 상태가 아니면 프로세스를 시작하도록 동작하는 스크립트를 crontab에 등록해 두는데, 한 가지 확인해 볼 게 생겼다. Celery worker를 관리하고 모니터링할 수 있는 Airflow Celery Flower를 이용하면 Worker의 Task Queue를 삭제하거나 추가할 수 있다. 이 때 Worker의 Task Queue를 삭제하면 worker 프로세스가 종료되지는 않을까? 직접 실험해봤다. 실험 방법 1. Celery Flower Web UI 접속 Task Queue를 삭제할 Worker 서버를 선택한다. 2. Queues 탭으로 이동 3. 비활성화할 Q..

[Airflow] OS 업그레이드 작업 기록 - 서비스 검증

개요 2023.08.29 - [Airflow] OS 업그레이드 작업 기록 - 서비스 검증 환경 구성 고민에서는 OS 업그레이드 작업 중 서비스 계정의 UID:GID 변경을 위한 검증 환경을 어떻게 구성할 지에 대해 고민했었다. 이 글에서는 구성은 끝났고, 어떻게 서비스를 검증했는지, 검증 작업 수행 순서 등에 대해 적어둔다. 현재 구성도는 대략 아래 사진과 같다. 인스턴스에 _NEW가 붙은 리소스가 신규 OS 서버이다. 서비스 검증 방법 신규 OS를 사용하는 서버에 Airflow 설치를 완료하고 서비스가 동작하기 위한 조건을 모두 갖췄다는 전제하에 서비스 검증을 진행한다. 가급적 서비스 중단 없이 진행하고자 블루-그린 업데이트를 수동으로 수행하는 모습으로 진행을 해보았다. WebServer / Celer..

[AWS] NLB - Unhealthy Target인데 라우팅 되는 경우

개요 2023.05.25 - [AWS] LB 동작 방식에서 AWS 로드밸런서의 전반적인 동작 방식에 대해 정리를 했었는데, NLB는 조금 다르게 동작하는 부분이 있는 것 같아 추가로 적어둔다. 예로 들어, 아래와 같이 사용자가 NLB를 통해 서비스에 접근하는 구조가 있다고 하자. AWS ELB는 기본적으로 Healthy 상태인 타깃 인스턴스로 라우팅을 수행한다. 따라서 Target group - 80에 등록된 타깃 인스턴스가 전부 아래 사진과 같이 unhealthy 상태라면 사용자는 서비스에 접근할 수 없어야 한다. 하지만 접근을 할 수 있었다! 실제로 나는 1년이 넘는 시간 동안 Target 인스턴스가 전부 unhealthy인 웹 서버에 접속을 아주 잘 하고 있었다. 어떻게 이럴 수 있었을까? 이유 1..

AWS 2023.09.01

[Shell Script] 스크립트 실행 방법

개요 쉘 스크립트를 실행하는 방법에는 여러 가지가 있는데 이 글에서는 각 방법에 대해 간단히 적어둔다. 실행 권한 부여 후 실행 작성한 스크립트 파일에 실행 권한을 부여하여 실행한다. 참고 : 2021.06.08 - chmod - 파일 권한 설정 # 실행 권한 부여 chmod 775 /path/script.sh ## 또는 chmod +x /path/script.sh # 스크립트 실행 /path/script.sh bash/sh 명령으로 실행 python 명령어에 실행할 코드를 지정하여 python 프로그램을 실행할 수 있는 것처럼 python /path/code/python.py 쉘 스크립트도 bash 또는 sh 명령으로 실행할 수 있다. 이때 스크립트를 호출하는 것과 달리 실행 권한이 없어도 된다. ba..

Linux/Shell Script 2023.08.31