Dev.YoungKyu
YoungKyu's Devlog
전체 방문자
오늘
어제
  • 분류 전체보기
    • 부스트캠프
    • visionOS
    • iOS
    • 알고리즘
    • CS
    • Git
    • Python
    • 끄적끄적

블로그 메뉴

  • 홈
  • 🌝 티스토리 홈
  • ⭐️ 깃허브
  • 태그

공지사항

인기 글

최근 댓글

최근 글

태그

  • MVC
  • boj
  • Python
  • 소프트웨어 테스트
  • 모듈화
  • Animation
  • 소프트웨어 공학
  • constraint
  • swift
  • ios
  • 소프트웨어공학
  • Optional
  • if let
  • CS
  • jekyll
  • 티스토리챌린지
  • Concurrency
  • image
  • 알고리즘
  • ImageResource
  • SwiftUI
  • avaudiosessionportdescription
  • guard
  • 오블완
  • Swift5.7
  • AVAudioSession
  • 부스트캠프
  • AutoLayout
  • 백준
  • Git

티스토리

hELLO · Designed By 정상우.
Dev.YoungKyu
nohup 명령어를 사용해도 서버가 꺼지는 문제
iOS

nohup 명령어를 사용해도 서버가 꺼지는 문제

2024. 11. 8. 01:15

리눅스 환경에서 서버를 백그라운드에서 실행시켜놓기 위해 nohup 명령어를 사용했다.
하지만 자꾸 서버가 꺼지는 문제가 발생했고, 그럴 때마다 수동으로 다시 실행시켜주었다.
하지만 이대로면 불침번을 서가며 서버를 켜야할 것 같아 문제 해결에 나섰다.

Vapor 가 문제?

가장 먼저 의심했던건 애석하게도 Vapor 프레임워크였다.
분명 Node.js 서버를 nohup node main.js & 명령어를 통해 백그라운드에서 실행해두었을 땐 멀쩡했는데, Vapor 서버로 바꾸고 나서부터 이런 일이 발생했다고 생각해 Vapor를 의심했다.
하지만 구글링도 해보고 vapor run 명령어에 관련 옵션이 있는지 문서도 찾아보았지만 별다른게 없었다.

터미널 강제종료

그 다음 의심한건 나의 터미널이다.
다시 서버를 구동시키기 위해 터미널로 서버 콘솔에 접속했고, nohup vapor run & 명령어를 통해 백그라운드에서 서버를 구동시켰다. 그리고 잘 동작하는지 서버 로그를 확인하기 위해 tail -f nohup.out 명령어로 로그를 확인하다가 터미널을 강제 종료시켰다.

이 과정에서 터미널을 종료하면 서버가 꺼지는건가? 라는 의문이 들어 실험을 진행했다.
실험 방법은 간단했다.

  1. nohup vapor run & 명령어로 백그라운드에서 서버를 실행시킨다.
  2. 터미널을 강제종료한다.
  3. 즉시 서버 콘솔에 다시 접속해 ps -ef | grep vapor 명령어를 통해 서버 프로세스가 살아있는지 확인한다.

실험 결과 터미널을 강제 종료하면 백그라운드 여부에 관계없이 프로세스가 종료됨을 확인할 수 있었다. 그리고 구글링을 통해 재밌는 사실을 알게 되었다.

우선 nohup 명령어는 리눅스(Linux)에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 계속 동작할 수 있게 해주는 명령어입니다.

원리는 터미널에서 로그아웃이 발생하면 리눅스는 해당 터미널에서 실행한 프로세스들에게 hup signal을 전달하여 종료시키는데, nohup 명령어가 이 hup signal을 무시하는 명령어기 때문에 터미널 연결이 끊어지거나 종료되도 실행했던 프로그램들이 계속 유지될 수 있는 것입니다.
출처

 

요약하자면 터미널 종료가 아닌 로그아웃을 하면 hup signal이 전달되어도 nohup 명령어가 hup signal을 무시하는 명령어이기 때문에, 꺼지지 않는다는 것 같다.

하지만 강제종료를 하면 정상적으로 이 signal을 무시하지 못해 종료되는 문제였다.

해결 방법

터미널을 강제종료 하지 말고, exit 명령어를 통해 서버 콘솔에서 로그아웃을 하고 터미널을 종료해야 한다.

추가 GPT 답변

저작자표시

'iOS' 카테고리의 다른 글

AVFAudio - AVAudioSession  (1) 2025.03.29
MVC, MVVM, Clean Architecture 정리  (2) 2025.03.14
Tuist 없이 모듈 만들기 with DemoApp  (0) 2024.11.07
네이버 클라우드 VPC 서버에 연결이 되지 않는 문제  (0) 2024.11.03
Swift Concurrency - Sendable  (2) 2024.10.25
    'iOS' 카테고리의 다른 글
    • AVFAudio - AVAudioSession
    • MVC, MVVM, Clean Architecture 정리
    • Tuist 없이 모듈 만들기 with DemoApp
    • 네이버 클라우드 VPC 서버에 연결이 되지 않는 문제
    Dev.YoungKyu
    Dev.YoungKyu
    iOS를 공부하고 있습니다

    티스토리툴바