포스트

2022-08-25-TIL

2022-08-25-TIL

Today I Learned

Elasticsearch vs OpenSearch

OpenSearch는 Elastic이 Elasticsearch와 Kibana를 오픈소스 라이선스가 아닌 Elastic License 등으로 바꾸면서, 마지막 오픈소스 버전인 Elasticsearch 7.10에서 갈라져 나온 포크다. OpenSearch는 Apache License 2.0을 유지하고, 2021년 7월 1.0으로 프로덕션 준비를 마쳤다(OpenSearch FAQ).

선택할 때 볼 것은 기능보다 라이선스와 생태계다. 갈라진 시점 이후 기능은 각자 따로 발전하므로, 클라이언트 라이브러리 호환성, 쓰려는 플러그인, 관리형 서비스 선택지를 함께 확인해야 한다. 7.10 이전 API를 쓰던 애플리케이션은 대체로 그대로 옮겨 갈 수 있지만, 그 이후 버전의 기능에 의존하면 이동이 어렵다.

  • https://pureinsights.com/blog/2021/elasticsearch-vs-opensearch-user-point-of-view-part-1-of-3/
  • https://couplewith.tistory.com/entry/%EB%8B%AC%EB%9D%BC%EC%A7%80%EB%8A%94-%EC%98%A4%ED%94%88-%EC%86%8C%EC%8A%A4-Elasticsearch%EC%9D%98-%EB%9D%BC%EC%9D%B4%EC%84%A0%EC%8A%A4-%EC%A0%84%EB%9E%B5

cron

cron은 정해진 시각에 명령을 실행하는 유닉스 데몬이고, crontab은 사용자별 작업 목록 파일과 그 파일을 편집하는 명령(crontab -e, crontab -l)이다. 한 줄은 다섯 개의 시간 필드와 실행할 명령으로 이루어진다(crontab(5)).

1
2
3
4
# 분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-7, 0과 7은 일요일)  명령
30 4 * * *  /home/app/backup.sh >> /var/log/backup.log 2>&1
*/10 * * * * /home/app/healthcheck.sh
@reboot     /home/app/start.sh

@reboot, @daily, @hourly 같은 별칭은 다섯 필드 대신 쓸 수 있다. @reboot는 재부팅 후 한 번 실행된다. 표현식이 맞는지는 crontab.guru 같은 도구로 확인하면 편하다.

man 페이지에 적힌 함정 몇 가지가 실제로 자주 문제를 일으킨다.

  • 일(day of month)과 요일 필드를 둘 다 *가 아닌 값으로 지정하면 둘 중 하나만 맞아도 실행된다. 30 4 1,15 * 5는 매월 1일과 15일, 그리고 매주 금요일에 실행된다.
  • 명령 안의 %는 줄바꿈으로 바뀌고 첫 % 이후는 표준 입력으로 넘어간다. date +%Y%m%d를 그대로 쓰면 명령이 잘려서, 링크의 serverfault 질문처럼 셸이 따옴표 짝을 찾지 못하는 에러가 난다. \%로 이스케이프해야 한다.
  • cron의 실행 환경은 로그인 셸과 다르다. SHELL은 기본 /bin/sh이고 PATH도 짧아서, 터미널에서 되던 스크립트가 cron에서는 명령을 찾지 못할 수 있다. 스크립트 안에서 절대 경로를 쓰거나 crontab 위쪽에 PATH를 지정한다.
  • 출력은 MAILTO로 메일 발송되므로, 메일 설정이 없다면 리다이렉션으로 파일에 남겨야 실패를 확인할 수 있다.

cron 작업이 실패하거나 아예 실행되지 않아도 알려 주는 곳이 없다는 것도 문제다. 링크의 Cronitor 같은 모니터링 서비스는 작업이 시작·종료할 때 URL을 호출하게 하고, 예정된 시각에 신호가 오지 않으면 알림을 보낸다. 실행 이력은 배포판에 따라 /var/log/cron이나 syslog에서 확인한다.

  • https://webdir.tistory.com/174
  • https://yangyag.tistory.com/358
  • https://mytory.net/archives/601
  • https://www.geeksforgeeks.org/crontab-in-linux-with-examples/
  • https://wlsvud84.tistory.com/32
  • https://www.fun-coding.org/linux_basic6.html
  • https://devconnected.com/cron-jobs-and-crontab-on-linux-explained/#:~:text=hourly%2C%20cron.,hourly%2C%20monthly%20and%20weekly%20folders.
  • https://stackoverflow.com/questions/21615673/difference-between-cron-crontab-and-cronjob
  • https://needjarvis.tistory.com/710
  • https://www.airplane.dev/blog/how-to-start-stop-and-restart-cron-jobs
  • https://ojava.tistory.com/154#:~:text=crontab%20%EC%8B%A4%ED%96%89%EB%A1%9C%EA%B7%B8%20%EC%A1%B0%ED%9A%8C&text=%EA%B5%B3%EC%9D%B4%20%EB%B3%84%EB%8F%84%EC%9D%98%20%ED%8C%8C%EC%9D%BC%EB%A1%9C,%EC%9D%B4%EB%A0%A5%EC%9D%84%20%EB%B3%BC%20%EC%88%98%20%EC%9E%88%EB%8B%A4.
  • https://cronitor.io/cron-job-monitoring?utm_source=cronmaker&utm_campaign=cron_failures
  • https://danmilife.tistory.com/4
  • https://geekflare.com/best-cron-job-monitoring/
  • https://www.cyberciti.biz/faq/linux-execute-cron-job-after-system-reboot/
  • https://www.cyberciti.biz/faq/howto-linux-unix-start-restart-cron/
  • https://crontab.guru/
  • https://server-talk.tistory.com/10
  • https://serverfault.com/questions/426748/unexpected-eof-while-looking-for-matching-on-cron-job
  • https://stackoverflow.com/questions/20910112/how-is-return-handled-in-a-function-while-loop

Algorithms with various languages

The Algorithms는 정렬, 탐색, 자료구조 같은 알고리즘을 여러 프로그래밍 언어로 구현해 모아 둔 오픈소스 프로젝트다. 같은 알고리즘을 언어별로 비교해 볼 수 있다.

  • https://the-algorithms.com
참고한 자료외부 출처 2

외부 출처

이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.

댓글

아직 댓글이 없습니다