개발자
우분투 서버를 하나만들어서 배포를 하려고합니다. aws는 아니고 자체적으로 os를 설치해서 이용하게되었는데 root에서 jar파일을 nohup & 으로 백그라운드 실행시켰는데 root가 로그아웃을 하니 프로젝트도 같이 다운됩니다. 여러가지 시나리오를 해봤는데 왜이러는건지 어떻게해야 실행시킨 프로젝트를 유지할수있을까요? 시도해본 시나리오 1. 사용자 user 와 root가 동시에 접속해서 duser가 프로젝트를 실행시키고 duser가 접속을 종료시 - 프로젝트 유지 - root가 로그아웃하면 프로젝트가 내려갑니다 2. 사용자가 먼저 접속해서 프로젝트를 백그라운드로 실행시킨후 root가 이후에 접속했다가 로그아웃한경우 - 프로젝트 유지 3. root 로 접속해서 user로 변경후 프로젝트 실행시 user에서 root로 변경했을때는 프로젝트가 유지되고 root를 로그아웃하면 프로젝트도 종료됩니다. 어떻게 접속했다가 로그아웃해도 프로젝트가 내려가지않게 하고싶습니다.
커리어리 AI 봇
GPT가 달아주는 답변입니다.
1월 22일
먼저 배포 서버에서 root 계정으로 직접 운영하는 것은 보안상 좋지 않으며, 최소한의 권한을 가진 계정(user)으로 필요한 동작을 수행하는 것이 보안에 더 합리적입니다. 백그라운드에서 실행 중인 프로세스가 로그아웃 시 종료되는 현상은 세션이 종료될 때 해당 세션과 연결된 자식 프로세스들도 함께 종료되기 때문입니다. 따라서 이를 방지하려면 프로세스를 백그라운드로 실행할 때, 해당 프로세스가 세션 종료를 무시하도록 설정해야 합니다. Linux 서버에서 프로그램이나 스크립트를 백그라운드에서 안전하게 실행하기 위해서는 `nohup`과 `&`을 함께 사용하는 것이 일반적입니다. 그러나 `nohup` 명령어 다음에 바로 `&`을 붙여서 실행하면 정상적으로 작동하지 않을 수 있으니 주의하세요. 다음과 같은 방식으로 명령어를 수정해보세요: ```bash nohup java -jar your_project.jar > output.log 2>&1 & ``` 이렇게 하면 표준 출력(stdout)과 표준 에러(stderr) 모두 output.log 파일에 저장됩니다. (`2>&1`은 표준 에러 출력을 표준 출력으로 리디렉션하는 것을 의미합니다) 정상적으로 실행되는지 확인하려면 `output.log` 파일을 열어봐야 합니다. 만약 이 파일에 로그가 없다면, 아마도 `nohup.out`라는 이름의 파일에 로그가 존재할 것입니다. 백그라운드로 실행하고 있는 작업들의 상태를 확인하려면 `jobs -l` 명령어를 사용하세요. 현재 백그라운드에서 돌고 있는 프로세스의 job 번호, 프로세스 ID (PID), 상태 등을 확인할 수 있습니다. 더 나아가 프로그램이 서버 재부팅 후에도 자동으로 실행되어야 한다면 systemd나 cron 등 다른 방법들을 찾아보세요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!