리눅스 서버 간 통신 상태를 확인할 수 있는 명령어

다음은 리눅스 서버 간 통신 상태를 확인하기 위한 명령어와 사용 예시, 그리고 예상되는 결과 값을 소개합니다.

1. ping

- 사용법: ping <IP 주소 또는 도메인 이름>
- 설명: 서버와의 연결 상태를 확인하기 위해 사용됩니다. 서버로부 응답을 받으면 연결이 정상적으로 이루어진 것입니다.
- 예시: ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq= ttl=56 time=12.8 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=12.9 ms

2. traceroute 또는 tracepath

- 사용법: traceroute <IP 주소 또는 도메인 이름>
- 설명: 서버까지 경로와 그 사이에 위치한 노드들을 확인하는데 사용됩니다.
- 예시: traceroute 8.8.8.8

traceroute to 8.8.88 (8.8.8.8), 30 hops max, 60 byte packets
1  gateway (192.168.1.1)  0.619 ms  0.619 ms  0.613 ms
2  10.27.0.1 (10.27.0.1)  10.781 ms  11.989 ms  12.172
...
9  dns.google (8.8.8.8)  11.621 ms  11.583 ms  11.559 ms

3. netstat

- 사용법: netstat -tuln
- 설명: 네트워크 연결, 라우팅 테이블, 인터페이스 상태를 확인하며 통신이 정상적인지 확인할 수 있습니다.
- 예시: netstat -tuln

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::80                   :::*                    LISTEN
udp        0      0 0.0.0.0:68              0.0.0.0:*

4. nc (netcat)

- 사용법: nc -l <포트 번호>nc <IP 주소> <포트 번호>
- 설명: 두 대의 서버 사이에서 메시지를 주고받아 서버 간 통신이 정상적으로 이루어지는지 확인할 수 있습니다.
- 예시: nc -l 12345nc 192.168.1.1 12345

서버1:
nc -l 12345

서버2:
nc 192.168.1.1 12345
Hello, Server!

서버1:
Hello, Client!

5. curl

- 사용법: curl <URL 주소>
- 설명: 웹 서버와 통신하며 웹 리소스를 검색하고 다운로드하는 데 사용됩니다. 웹 페이지나 API에 요청을 보내고 응답을 받아볼 수 있습니다.
- 예시: curl http://example.com

<!doctype html>
<html>
<head>
    <title>Example Domain</title>
</head>
<body>
    <p>This domain is used for illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.</p>
</body>
</html>

'개발 > 리눅스' 카테고리의 다른 글

linux crontab  (0) 2023.03.16
linux flock 중복방지  (0) 2023.03.15

crontab 이란 cron table의 줄인 말이다.

cron은 linux 에서 batch 작업이라고 생각하면 편하다.(주기적으로 실행되는 명령어를 정해진 시간에 자동으로 실행해주는 도구)

crontab은 사용자의 개별 crontab 즉 cron 작업들을 관리하는 명령어이다.

1. linux 재부팅시 cron을 자동 수행하고자 하는 경우

# 재부팅시 자동 수행 or 미수행
 sudo systemctl [enable/disable] crond
# cron systemctl 등록 확인
 sudo systemctl list-unit-files | grep crond

2. cron 실행 명령어

# crond 실행/중지/재시작/상태
 service crond [start/stop/restart/status]

3. crontab 명령어

# crontab 편집
 crontab -e

# crontab 리스트
  crontab -l
# crontab 리스트 전체 삭제
  crontab -r

4. crontab 수행주기

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

[수행주기별 특수 기호]
1. * : 해당 기호가 입력되면 해당 필드의 모든 값에서  cron 실행 
2. - : 숫자 구간을 지정 가능

3. , : 특정값을 여러개 지정 가능. 구각이나 주기로 지정이 안되는 불특정한 값
4. / : 값을 특정 주기로 나눌때 사용
[예시 ]
# 매주 토요일 작업 7시 10분 작업

 10 07 * * 6  /home/test/test.sh 

# 매년 1월 1일 7시 10분 작업
  10 07 1 1 * /home/test/test.sh 
# 매일 7시 9시 12시 0분에 작업
00 7,9,12 * * * /home/test/test.sh 
# 5분마다 수행
 */5 * * * * /home/test/test.sh 
# 매달 1일부터 5일까지 7시에 작업
 0 7 1-5 * * /home/test/test.sh 

cron 작업에 대해서 중복실행을 막기 위해서는 flock이란 명령어를 써야하며 해당은 flock에 관한 글을 참고하면 된다.

'개발 > 리눅스' 카테고리의 다른 글

리눅스 서버 간 통신 확인하기  (0) 2023.07.24
linux flock 중복방지  (0) 2023.03.15

crontab 작업시 중첩되어 수행되면 안되는 경우가 존재한다.

나의 경우에는 매주 토요일 도는 작업이 있는데, 1월 1일에도 돌려야하지만 중복되면 안되는 cron 작업이 있어 해당 사항을 검색하던 도중 flock 이란 명령어가 있는걸 알게되었다.

flock의 기본 명령어는 https://man7.org/linux/man-pages/man1/flock.1.html를 참고하길 바란다. 

여기서는 중복방지를 위한 -n 옵션에 대해서만 정리 및 테스트해보았다.

옵션 [ -n ]
flock 으로 동작 중인 스크립트가 존재하면 또 다른 flock 으로 스크립트를 실행할 때 실패로 종료된다.
flock -n [1번 Script] ==> 동작
flock -n [2번 Script] ==> 실패

[변경 전]
# 매주 토요일 작업

 10 07 * * 6  /home/test/test.sh 1

#1월 1일 작업
  10 07 1 1 * /home/test/test.sh 1
[변경 후]
# 매주 토요일 작업

 10 07 * * 6 /usr/bin/flock -n /tmp/test1.lock /home/test/test.sh 1

#1월 1일 작업
  10 07 1 1 * /usr/bin/flock -n /tmp/test1.lock /home/test/test.sh 1

변경 전 매주 토요일 7시 10분과 1월 1일 7시 10분에 동일 작업이 수행된다. 1월 1일이 토요일이 아니면 문제가 없지만 일자가 겹친다면 문제가 발생할 수 있다.

flock 의 경우 -n 옵션을 주게되면 중복 실행이 방지된다. 해당 프로세스 한군데만 주는것이 아니라 하나만 실행시킬 프로세스 양쪽에 모두 flock을 적용해야한다.

또한 프로세스별로 막힌다기보다는 lock 파일을 기준으로 프로세스가 막힌다. 두번째 인자인 /tmp/test1.lock 의 경우는 본인이 원하는 위치에 lock file을 만들면 되기때문에 본인이 원하는 경로에 원하는 이름으로 쓰면 된다.

 변경 후에는 만약 1월1일이 토요일이라면 프로세스가 한번만 실행될 것이다.

flock에 대해서 테스트를 해봤는데 수행 내용은 다음과 같다.

[crontab -l]

* 13 * * * /usr/bin/flock -n /tmp/test.lock /home/test/test.sh 3 >> /home/test/tmp.txt
45 13 * * * /usr/bin/flock -n /tmp/test.lock /home/test/test.sh 3 >> /home/test/tmp.txt
46 13 * * * /usr/bin/flock -n /tmp/test.lock /home/test/test.sh 1 >> /home/notes/test/tmp.txt

[test.sh]

#! /bin/bash
TIME=$(date)

case "$1" in
                   1) echo -e "\ntest1 : $TIME"
                      ;;
                    2) echo -e "\ntest2 : $TIME"
                      ;;
                    3)  echo -e "\ntest3 : $TIME"
                      ;;
                     *) echo -e "\ntest!!! : $TIME"
                      ;;
esac
exit

test.sh 을 크론으로 13시부터 실행하였고 echo로 수행 작업을 tmp.txt에 떨어지도록 처리하였다.

test.lock 파일 이름을 동일하게 수행하면 45분에 test3에 대한 로그, 46분에도 test3에 대한 로그가 나오지만, 각 프로세스의 lock 파일명을 test1.lock, test2.lock, test3.lock으로 바꾸게 된다면, 45분에는 test3에 대한 로그 2개, 46분에는 test3 로그 1개, test1 로그 1개 나오게 된다.

이상으로 flock 의 -n 옵션에 대해서 알아봤다. 

구글링등을 해봤을때 가장 헷갈렸던 부분은 lock 파일 부분이었는데, 결국 lock 파일 기준으로 중복 프로세스를 방지하고있었다.

참고 사이트 : https://iteddy.tistory.com/5

'개발 > 리눅스' 카테고리의 다른 글

리눅스 서버 간 통신 확인하기  (0) 2023.07.24
linux crontab  (0) 2023.03.16

TABLE 내의 데이터 입력시 기존 데이터를 조회하여 입력해야하는 경우가 있다.


ex)

INSERT INTO A ( a1,a2,a3,a4....)
 SELECT b1,b2,b3,b4... 
  FROM B


- "B"테이블의 정보를 "A" 테이블 내로 입력할경우 컬럼의 수는 맞춰야한다.

- SELECT 부분은 "C" 테이블과 조인하여서 정보를 가져와도 무방하다.

+ Recent posts