[jmpark@jmpark ~]$ ll
합계 0
drwxr-xr-x. 2 jmpark jmpark 6  8월  1 21:59 공개
drwxr-xr-x. 2 jmpark jmpark 6  8월  1 21:59 다운로드
drwxr-xr-x. 2 jmpark jmpark 6  8월  1 21:59 문서
drwxr-xr-x. 2 jmpark jmpark 6  8월  1 21:59 바탕화면
drwxr-xr-x. 2 jmpark jmpark 6  8월  1 21:59 비디오
drwxr-xr-x. 2 jmpark jmpark 6  8월  1 21:59 사진
drwxr-xr-x. 2 jmpark jmpark 6  8월  1 21:59 서식
drwxr-xr-x. 2 jmpark jmpark 6  8월  1 21:59 음악
[jmpark@jmpark ~]$ vi bash_profile
[jmpark@jmpark ~]$ vi .bash_profile

 

bash_profile 는 사용자의 홈 디렉토리 안에 있잖아. 근데 조회하면 안보이는건 왜 그런걸까?
그리고 vi bash_profile가 아니라 vi .bash_profile로 편집기를 여는 이유는? .이 왜 붙는거지?

 

 

1. 숨김 파일 조회

bash_profile 파일이 사용자 홈 디렉토리에 있지만, 기본적으로 ls 명령어로는 숨김 파일이 보이지 않는다.

숨김 파일은 파일 이름이 .(점)으로 시작하는 파일을 말하고 파일 이름 앞에 .이 붙으면 해당 파일은 기본적으로 숨김 파일로 처리된다.

예를 들면, .bash_profile과 같은 파일은 숨김 파일이다.

 

숨김 파일을 보려면 -a 옵션을 사용하면 된다.

ls -a

이 명령어를 사용하면 숨김 파일도 포함한 모든 파일이 표시된다.

 

파일 이름 앞의 .(점) 사용 이유:

s 명령어로는 보이지 않게 하여, 사용자에게 중요하지 않은 설정 파일이 일반 파일 목록에 섞이지 않도록 하는 것이다.

2. vi .bash_profile와 vi bash_profile의 차이

.bash_profile은 Bash 셸의 로그인 세션에 관련된 환경 설정 파일로, 보통 숨김 파일로 존재하며 사용자 설정과 관련된 중요한 정보가 담겨 있다.

  • vi .bash_profile:
    • 이 명령어는 사용자의 홈 디렉토리에 있는 .bash_profile 파일을 열게 된다.
    • 파일 이름 앞에 .(점)이 붙어있기 때문에 이 파일은 숨김 파일를 의미한다.
  • vi bash_profile:
    • 이 명령어는 현재 작업 디렉토리에서 bash_profile이라는 파일을 vi 편집기로 오픈한다.
    • 만약 현재 작업 디렉토리에 bash_profile 파일이 없으면 에러가 발생하게 된다.

JAVA_HOME

  • Java Development Kit (JDK)가 설치된 경로를 지정하는 환경 변수
  • 용도: 여러 Java 기반 도구와 애플리케이션에서 Java의 설치 경로를 참조하는 데 사용된다.
    예를 들어, Maven, Gradle 등과 같은 빌드 도구가 JAVA_HOME을 사용하여 JDK를 찾는다.

PATH

  • 정의: 실행 가능한 프로그램의 경로를 지정하는 환경 변수
  • 용도: 터미널에서 Java 명령어(java, javac 등)를 언제 어디서나 사용할 수 있도록 하기 위해, Java 실행 파일이 위치한 bin 디렉토리 PATH에 추가하고 이를 통해 사용자는 java -version과 같은 명령어 사용할 수 있게 된다.

 

설정 예시

# JAVA_HOME 설정
export JAVA_HOME=/app/java8

# PATH에 JAVA_HOME/bin 추가
export PATH=$PATH:$JAVA_HOME/bin

 

이렇게 설정하면, Java JDK가 설치된 경로와 실행 파일 경로를 모두 사용할 수 있다!

 


 

 

$PATH: 이건 또 뭐얏?!

$PATH는 현재 사용자의 환경 변수 중 하나로, 실행 가능한 프로그램의 경로를 포함하는 문자열이다.

이 변수는 터미널에서 명령어를 입력했을 때, 시스템이 해당 명령어를 찾기 위해 검색하는 디렉토리 목록을 정의한다.

  1. 경로 목록:
    • $PATH는 여러 디렉토리 경로를 콜론(:)으로 구분하여 나열한 문자열이다.
      /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      
    • 이 경우, 시스템은 이 경로들에서 차례로 명령어를 찾습니다.
  2. 명령어 실행:
    • 사용자가 터미널에서 명령어를 입력하면, 시스템은 $PATH에 나열된 디렉토리에서 해당 명령어를 검색한다.
    • 만약 명령어가 $PATH에 포함된 디렉토리 중 하나에 존재하면, 그 프로그램이 실행된다.
  3. 환경 변수 설정:
    • 새로운 경로를 추가하려면, PATH 변수에 새로운 경로를 추가할 수 있다.
      export PATH=$PATH:/new/directory/path
      
    • 이 명령어는 기존의 PATH에 /new/directory/path를 추가합니다.

$PATH가 올바르게 설정되지 않으면, 시스템이 특정 명령어를 찾지 못해 "command not found" 오류가 발생할 수 있다.

 

 


 

JAVA_HOME과 PATH를 동시에 설정하는 이유

 

1. 명확한 경로 지정

  • JAVA_HOME: JDK의 설치 위치를 명확하게 지정하게 되면 이는 여러 도구와 애플리케이션에서 Java의 설치 경로를 찾는 데 사용되며, 경로를 변경할 필요가 있을 때 한 곳만 수정하면 된다.
  • PATH: Java 실행 파일(java, javac 등)이 위치한 디렉토리를 추가하여, 터미널에서 간편하게 Java 명령어를 사용할 수 있게 한다.

2. 도구와 애플리케이션 호환성

  • 많은 Java 기반 도구(예: Maven, Gradle 등)는 JAVA_HOME 환경 변수를 사용하여 JDK를 찾게 되고 이 변수 없이는 도구가 Java를 제대로 인식하지 못할 수 있다.
  • PATH가 설정되어 있지 않으면, 사용자가 터미널에서 Java 명령어를 입력할 때 "명령어를 찾을 수 없음"이라는 오류가 발생할 수 있다.

3. 편리함

  • JAVA_HOME과 PATH를 모두 설정하면, Java 개발 환경을 설정하는 데 있어 더 편리하다. 코드 작성, 빌드 및 실행 과정에서 Java 관련 명령어를 쉽게 사용할 수 있고, 도구들이 JDK를 쉽게 찾을 수 있다.

4. 유지 보수 용이성

  • JDK의 경로가 변경되거나 업그레이드할 경우, JAVA_HOME만 수정하면 되므로 유지 보수가 용이하다. PATH에 추가된 경로는 변하지 않으므로, 단일 경로만 변경하면 된다.

서비스(데몬) 자동 시작 설정 방법은 3가지가 있다.

  1. rc.local에 얹기
    • 데몬 하나 정도는 괜찮지만 2개부터는 관리가 안됨
  2. systemctl에 새로 등록 (systemd)
    • 해당 데몬을 위한 서비스를 새로 만들어서 관리
    • CentOS7이상, Ubuntu에서 사용
  3. chkconfig에 등록
    • CentOS6이하에서도 가능

 

나는 OS를 Rocky 8을 사용중이므로 systemctl에 서비스를 새로 등록하는 방법으로 진행하겠다.

  • 목적 : 서버 재부팅 시 Root가 아닌 일반 사용자(jmpark)으로 서비스 데몬 자동 시작
  • 테스트 OS : Rocky8.10
  • 서비스 관리 명령어 : systemctl
  • runServer.sh : 실행 파일을 위에서 설정한 환경 변수들을 인자로 전달하여 백그라운드에서 실행하는 스크립트

 

runServer.sh는 내가 사용하는 스크립트이므로
데몬 자동시작 테스트할 스크립트 rebootTest.sh를 만들어서 이해하면 좋을듯!
rebootTest.sh는 하단에 참고한 블로그에 나와있는 내용임을 밝힙니다.

 

# 데몬 자동시작 테스트할 스크립트  rebootTest.sh 작성

더보기

 테스트 스크립트 작성

  • 실제 스크립트를 만들기 전에 작동하는지 테스트하기 위한 스크립트를 작성
  • /app/server/bin 위치에 rebootTest.sh 를 만듦 (위치는 알아서 상황에 맞게)
  • 실행시 현재시간을 기록하는 스크립트 작성
[jmpark@localhost bin]$ cat rebootTest.sh
#!/bin/sh
date >> /logs/server/date_log.txt

 

  • 스크립트 실행 권한 부여 (rw-r--r-- --> rwxr-xr--)
[jmpark@localhost bin]$ chmod 754 rebootTest.sh #chmod +x rebootTest.sh 로 권한 부여 가능
[jmpark@localhost bin]$ ll
합계 48
-rwxr-xr--. 1 jmpark jmpark   47  8월  2 12:55 rebootTest.sh
-rwxr-x---. 1 jmpark root    186  4월 15 22:14 restartServer.cmd
-rwxr-x---. 1 jmpark root    205  4월 15 22:14 restartServer.sh
-rwxr-x---. 1 jmpark root   9948  7월 27 00:06 rtim-server
-rwxr-x---. 1 jmpark root   7065  7월 27 00:06 rtim-server.bat
-rwxr-x---. 1 jmpark root   1090  4월 15 22:14 runServer.cmd
-rwxr-x---. 1 jmpark root   1155  4월 15 22:14 runServer.sh
-rwxr-x---. 1 jmpark root    183  4월 15 22:14 stopServer.cmd
-rwxr-x---. 1 jmpark root    202  4월 15 22:14 stopServer.sh

 

  • 스크립트 실행
[jmpark@localhost bin]$ sh rebootTest.sh
[jmpark@localhost bin]$ cat /logs/server/date_log.txt
2024. 08. 02. (금) 13:21:55 KST

 

잘 실행된 걸 확인 할 수 있음!

 

# systemd에 등록하여 systemctl에서 관리가 가능하도록 설정

  • systemd 경로 : /etc/systemd
  • 서비스 이름 : server (서비스 이름은 알아서 정하면 됨)
  • /etc/systemd/system 경로에 server.service를 만들고 설정 (만들 때 당연히 root 사용자로 파일 만들어야 함)
  • systemd는 유닛 파일이 실행 가능한 파일이 되어서는 안됨
  • 권한은 644를 기본으로 하며, 이와 다를 경우 보안상 취약한 상태
[root@localhost ~]# cd /etc/systemd/system/
[root@localhost system]# vi server.service
[Unit]
Description=Run RTIM Server as jmpark user

[Service]
Type=forking
User=jmpark
WorkingDirectory=/app/server/bin
ExecStart=/bin/bash /app/server/bin/runServer.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target # 시스템 부팅 시 대부분의 서비스가 실행되는 기본 대상을 의미

 

## Service Type 설정

개인적인 생각이지만 service 타입 설정이 제일 중요한 듯, 구동시키는 스크립트가 어떤 기능을 하는지에 따라 설정해줘야 한다. 아니면 백날천날 안됨.

더보기
  1. simple:
    • 기본값으로, ExecStart에 설정된 프로그램이 즉시 실행되고, 그 프로그램이 실행 중인 상태로 간주됩니다.
    • 이 타입은 프로그램이 포그라운드에서 실행될 때 사용합니다. 만약 runServer.sh가 포그라운드에서 실행되고, 해당 프로세스가 종료되지 않는다면 이 타입을 사용할 수 있습니다.
  2. forking:
    • ExecStart에서 실행된 프로세스가 자식 프로세스를 생성하고, 부모 프로세스가 종료되는 경우에 사용합니다.
    • 만약 runServer.sh가 서버를 데몬 형태로 실행하고, 부모 프로세스가 종료되며 자식 프로세스가 계속 실행된다면 이 타입을 선택해야 합니다.
  3. oneshot:
    • 주로 초기화 작업이나 설정을 위해 사용되며, 스크립트가 실행된 후 종료되더라도 서비스가 활성 상태로 간주되도록 합니다.
    • 만약 runServer.sh가 서버를 실행한 후에 종료된다면 이 타입을 사용할 수 있지만, 일반적으로 서버 프로그램은 지속적으로 실행되므로 적합하지 않을 수 있습니다.

 

나의 경우는 runServer.sh rtim-server를 백그라운드에서 실행하는 방식으로 설정되어 있기 때문에,
'forking'으로 설정하는 것이 적합했다. forking은 부모 프로세스가 종료되고 자식 프로세스가 지속적으로 실행되기 때문..

 

단순한 로그를 남기는 rebootTest.sh는 'simple'을 사용하면 된다.

 

## User 설정

OS는 기본적으로 reboot시 root로 실행시키기 때문에 여기서 데몬을 구동시킬 사용자를 명시해주면 됨

- 물론 여기서 설정한 사용자는 WorkingDirectory나 ExecStart에서 설정한 경로와 스크립트에 접근 실행 권한을 모두 가지고 있어야 함, 필요에 따라 소유자도 변경

 

 

## ExecStart 설정

구동시킬 스크립트 적는 명령어 

- Environment를 통해 환경변수를 설정하고 경로에 환경변수를 이용할 수 도 있고

/bin/bash -c "/app/server/bin/rebootTest.sh start"

이런 식으로 다양하게 적을 수 있음

 

## Restart 설정

Restart=on-failure는 서버가 의도치 않게 비정상적으로 종료되었을 때 자동으로 재시작하는 설정이고

비정상 종료된 기준이 궁금하면 접은 글 펴보세욥

더보기
  1. 프로세스가 비정상적으로 종료된 경우:
    • 프로세스가 exit 코드 0이 아닌 값으로 종료되거나, SIGKILL (kill -9)와 같은 신호로 강제 종료된 경우를 말합니다. 즉, 프로세스가 예기치 않게 종료된 경우입니다.
    • 예를 들어, kill -9 pid와 같은 명령어로 프로세스를 종료하면, systemd는 이를 비정상 종료로 간주합니다.
  2. 정상 종료와 비정상 종료:
    • 정상적으로 종료된 경우는 exit 0 코드를 반환하는 경우입니다. 예를 들어, systemctl stop server.service를 통해 서비스가 정상적으로 중지되면 systemd는 이를 정상 종료로 간주합니다.
    • reboot 명령어로 시스템이 재부팅될 경우에도 서비스는 비정상 종료로 간주되지 않습니다. systemd는 서비스가 시스템 종료 또는 재부팅 중에 중지되었음을 인식하고, 이를 정상적인 종료로 처리합니다.
  3. ExecStop과 관련된 스크립트:
    • stopServer.sh와 같은 스크립트를 통해 서버를 정지하는 경우, 해당 스크립트가 정상적으로 실행되고 종료되면 systemd는 이를 정상 종료로 간주합니다. 이 경우, 스크립트가 종료 코드 0을 반환해야 합니다.

# workingDirecory

더보기
  1. 작업 디렉토리 설정:
    • WorkingDirectory는 실행할 명령어가 사용해야 할 기본 작업 디렉토리를 지정합니다. 이는 명령어가 상대 경로로 파일을 찾거나 생성할 때 기준이 되는 디렉토리입니다.
    • 예를 들어, ExecStart에 명시된 경로가 절대 경로일지라도, 실행 중에 발생하는 파일 작업은 WorkingDirectory에서 상대적으로 처리됩니다.
  2. 파일 접근 문제 방지:
    • 명령어가 실행될 때, 해당 명령어가 사용하는 파일이나 리소스가 WorkingDirectory에 있을 경우, 상대 경로로 접근할 수 있습니다. 만약 WorkingDirectory가 설정되어 있지 않다면, 기본적으로 /(루트 디렉토리)에서 실행되므로 파일을 찾지 못할 수 있습니다.
  3. 스크립트나 프로그램의 통일성:
    • 여러 스크립트나 프로그램이 동일한 작업 디렉토리를 사용해야 할 경우, WorkingDirectory를 통해 일관된 작업 환경을 제공할 수 있습니다. 이는 특히 복잡한 애플리케이션에서 유용합니다.
  • WorkingDirectory=/app/server: 이 설정으로 인해, rtim-server가 실행될 때 기본 작업 디렉토리는 /app/server가 됩니다.
  • ExecStart=/app/server/bin/rtim-server start: 이 경로는 명령어의 절대 경로입니다.

이 경우, 만약 rtim-server가 상대 경로로 파일에 접근해야 한다면, /app/server를 기준으로 하게 됩니다. 따라서, 파일 작업이 더 원활하게 이루어질 수 있습니다.

# 서비스 등록 여부 확인 및 자동시작 설정

  • 등록한 서비스 보이는지 확인
[root@localhost system]# systemctl status server
● server.service - when reboot, server.service auto start to user
   Loaded: loaded (/etc/systemd/system/server.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
   
[jmpark@localhost ~]$ systemctl enable server

 

# systemctl 명령어로 시스템 돌려보기

[jmpark@localhost ~] su -
암호:
[root@localhost ~]# systemctl start server
[root@localhost ~]# ps -ef | grep Main
jmpark       928       1  0 15:06 ?        00:00:08 java -Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:SurvivorRatio=8 -verbose:gc -Xloggc:../logs/gc.log -XX:+PrintGCTimeStamps -XX:-TraceClassUnloading -XX:+PrintHeapAtGC -Djava.net.preferIPv4Stack=true -DPROV -classpath /app/server/conf

구동 확인 됨. rebbot 해서 동일한 명령어로 다시 확인하면 끝!

 

나같은 경우는 Server 구동됬는지 ps -ef로 확인 했지만

rebootTest.sh로 설정한 사람들은 /logs/server/date_log.txt에 로그가 잘 쌓였는지 확인하면 됨


참고한 블로그 ( 그대로 따라해도 안되는 망고매직.. )

https://dong-it-engineer.tistory.com/35

 

리눅스 재부팅시 서비스 자동시작

리눅스 서비스(데몬) 자동시작 3가지방법 1) rc.local에 얹기 -- 데몬 하나정도는 괜찮은데 2개부터는 관리가 안됨 2) systemctl에 새로 등록 (systemd) -- 해당 데몬을 위한 서비스를 새로 만들어서 관리 --

dong-it-engineer.tistory.com

'OS' 카테고리의 다른 글

[Mac] 사용자 추가 및 홈 디렉토리 설정  (0) 2024.08.04

1. 루트 사용자로 전환

jungmin@bagjeongmin-ui-MacBookPro ~ % sudo -s
Password:

 

2. 사용자 추가

root@bagjeongmin-ui-MacBookPro ~ # sudo dscl . -create /Users/rathon

 

3. 추가한 사용한 UID(사용자ID) 할당

 - 1001번 사용 중인지 조회해보고 없으니까 할당 후 확인!

root@bagjeongmin-ui-MacBookPro ~ # dscl . list /Users UniqueID | grep 1001

root@bagjeongmin-ui-MacBookPro ~ # sudo dscl . -create /Users/rathon UniqueID 1001

root@bagjeongmin-ui-MacBookPro ~ # dscl . list /Users UniqueID | grep 1001

rathon                   1001

 

4. 추가한 사용한 GID(그룹 ID) 할당

 - 간단한 작업을 위해 추가한 사용자라 admin 그룹까지는 아니고 staff 권한을 주겠다. 

root@bagjeongmin-ui-MacBookPro /Users # ls -al
total 0
drwxr-xr-x   5 root     admin   160  2 17 23:31 .
drwxr-xr-x  20 root     wheel   640  2  3  2024 ..
-rw-r--r--   1 root     wheel     0  2  3  2024 .localized
drwxrwxrwt   7 root     wheel   224  5  8 00:32 Shared
drwxr-x---+ 39 jungmin  staff  1248  8  4 18:59 jungmin

 

- staff 그룹 아이디 조회

root@bagjeongmin-ui-MacBookPro /Users # dscl . -read /Groups/staff

AppleMetaNodeLocation: /Local/Default
GeneratedUID: ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000014
GroupMembers: FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000 B5033C0C-C195-4FAC-B7ED-607CF32C2DCD
GroupMembership: root jungmin
Password: *
PrimaryGroupID: 20
RealName: Staff
RecordName: staff BUILTIN\Users
RecordType: dsRecTypeStandard:Groups
SMBSID: S-1-5-32-545

 

 - 그룹 아이디 할당

root@bagjeongmin-ui-MacBookPro /Users # sudo dscl . -create /Users/rathon PrimaryGroupID 20

 

5. 사용자 홈 디렉토리 생성 / 소유자 변경

root@bagjeongmin-ui-MacBookPro /Users # ls -al
total 0
drwxr-xr-x   5 root     admin   160  2 17 23:31 .
drwxr-xr-x  20 root     wheel   640  2  3  2024 ..
-rw-r--r--   1 root     wheel     0  2  3  2024 .localized
drwxrwxrwt   7 root     wheel   224  5  8 00:32 Shared
drwxr-x---+ 39 jungmin  staff  1248  8  4 18:59 jungmin
root@bagjeongmin-ui-MacBookPro /Users #
root@bagjeongmin-ui-MacBookPro /Users #
root@bagjeongmin-ui-MacBookPro /Users #
root@bagjeongmin-ui-MacBookPro /Users #
root@bagjeongmin-ui-MacBookPro /Users #
root@bagjeongmin-ui-MacBookPro /Users # sudo mkdir /Users/rathon
root@bagjeongmin-ui-MacBookPro /Users # sudo chown rathon:staff /Users/rathon
root@bagjeongmin-ui-MacBookPro /Users # ls -al
total 0
drwxr-xr-x   6 root     admin   192  8  4 19:33 .
drwxr-xr-x  20 root     wheel   640  2  3  2024 ..
-rw-r--r--   1 root     wheel     0  2  3  2024 .localized
drwxrwxrwt   7 root     wheel   224  5  8 00:32 Shared
drwxr-x---+ 39 jungmin  staff  1248  8  4 18:59 jungmin
drwxr-xr-x@  2 rathon   staff    64  8  4 19:33 rathon


5. 사용자 홈 디렉토리 지정

root@bagjeongmin-ui-MacBookPro /Users # sudo dscl . -create /Users/rathon NFSHomeDirectory /Users/rathon

 

6. 사용자의 로그인 쉘 지정

root@bagjeongmin-ui-MacBookPro /Users # sudo dscl . -create /Users/rathon UserShell /bin/zsh

 

7. 비밀번호 설정

root@bagjeongmin-ui-MacBookPro /Users # sudo passwd rathon
Changing password for rathon.
New password:
Retype new password:

################################### WARNING ###################################
# This tool does not update the login keychain password.                      #
# To update it, run `security set-keychain-password` as the user in question, #
# or as root providing a path to such user's login keychain.                  #
###############################################################################

 

끝!

 

사용자 변경해서 작업하자

root@bagjeongmin-ui-MacBookPro /Users # su - rathon
rathon@bagjeongmin-ui-MacBookPro ~ %

설정파일을 편집기로 열고 max_connections의 수치를 늘려준다.

[root@localhost data]# pwd
/var/lib/pgsql/16/data

[root@localhost data]# ll
합계 68
-rw-------. 1 postgres postgres     3  7월 30 14:13 PG_VERSION
drwx------. 5 postgres postgres    33  7월 30 14:13 base
-rw-------. 1 postgres postgres    30  7월 30 14:20 current_logfiles
drwx------. 2 postgres postgres  4096  7월 30 14:21 global
drwx------. 2 postgres postgres    32  7월 30 14:14 log
drwx------. 2 postgres postgres     6  7월 30 14:13 pg_commit_ts
drwx------. 2 postgres postgres     6  7월 30 14:13 pg_dynshmem
-rw-------. 1 postgres postgres  5527  7월 30 14:20 pg_hba.conf
-rw-------. 1 postgres postgres  2640  7월 30 14:13 pg_ident.conf
drwx------. 4 postgres postgres    68  7월 30 14:25 pg_logical
drwx------. 4 postgres postgres    36  7월 30 14:13 pg_multixact
drwx------. 2 postgres postgres     6  7월 30 14:13 pg_notify
drwx------. 2 postgres postgres     6  7월 30 14:13 pg_replslot
drwx------. 2 postgres postgres     6  7월 30 14:13 pg_serial
drwx------. 2 postgres postgres     6  7월 30 14:13 pg_snapshots
drwx------. 2 postgres postgres     6  7월 30 14:20 pg_stat
drwx------. 2 postgres postgres     6  7월 30 14:13 pg_stat_tmp
drwx------. 2 postgres postgres    18  7월 30 14:13 pg_subtrans
drwx------. 2 postgres postgres     6  7월 30 14:13 pg_tblspc
drwx------. 2 postgres postgres     6  7월 30 14:13 pg_twophase
drwx------. 3 postgres postgres    60  7월 30 14:13 pg_wal
drwx------. 2 postgres postgres    18  7월 30 14:13 pg_xact
-rw-------. 1 postgres postgres    88  7월 30 14:13 postgresql.auto.conf
-rw-------. 1 postgres postgres 29683  7월 30 14:16 postgresql.conf
-rw-------. 1 postgres postgres    58  7월 30 14:20 postmaster.opts
-rw-------. 1 postgres postgres    92  7월 30 14:20 postmaster.pid

[root@localhost data]# vi postgresql.conf

 

해당 항목 100 -> 1000 변경

 max_connections = 1000

 * 꿀팁!

vi 편집기에서 ESC누르고 /치고 원하는 글자 입력하고 엔터치면 검색됨

 

 

재시작 필수

[postgres@localhost data]$ systemctl stop postgresql-16.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
'postgresql-16.service' 서비스 유닛을 멈추려면 인증이 필요합니다.
Authenticating as: jmpark
Password:
==== AUTHENTICATION COMPLETE ====
[postgres@localhost data]$ systemctl start postgresql-16.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
'postgresql-16.service' 서비스 유닛을 시작하려면 인증이 필요합니다.
Authenticating as: jmpark
Password:
==== AUTHENTICATION COMPLETE ====
[postgres@localhost data]$ systemctl status postgresql-16.service
● postgresql-16.service - PostgreSQL 16 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2024-07-31 22:10:03 EDT; 6s ago
     Docs: https://www.postgresql.org/docs/16/static/
  Process: 22720 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 22725 (postgres)
    Tasks: 7 (limit: 22875)
   Memory: 46.2M
   CGroup: /system.slice/postgresql-16.service
           ├─22725 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/
           ├─22727 postgres: logger
           ├─22728 postgres: checkpointer
           ├─22729 postgres: background writer
           ├─22731 postgres: walwriter
           ├─22732 postgres: autovacuum launcher
           └─22733 postgres: logical replication launcher

psql postgrespsql 접속하려는데 

root" 롤(role) 없음 오류가 나오면 이렇게 해결하면 됨

 

root 사용자에서 postgres 사용자로 변경 후 다시 시도

[root@localhost ~]# psql postgres
psql: 오류: "/run/postgresql/.s.PGSQL.5432" 소켓으로 서버 접속 할 수 없음: 치명적오류:  "root" 롤(role) 없음
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# su - postgres
[postgres@localhost ~]$ psql postgres
psql (16.3)
도움말을 보려면 "help"를 입력하십시오.

postgres=#

+ Recent posts