nohup 및 disown에도 불구하고 로그아웃 시 프로세스가 종료되는 이유는 무엇입니까?

nohup 및 disown에도 불구하고 로그아웃 시 프로세스가 종료되는 이유는 무엇입니까?

로그아웃한 후에도 계속 실행하고 싶은 실행 파일(Unity로 만든 서버)이 있습니다. 모든 인터넷에서는 nohup둘 중 하나 또는 둘 다를 통해 disown이 작업을 수행 할 수 있어야 한다고 말합니다. 그러나 이것은 작동하지 않습니다. 나는 다음을 원한다:

nohup /usr/bin/myexecutable &
disown -h

이 시점에서 프로세스 목록을 확인해보면 나의 프로세스가 실행되고 있는 것입니다. 그런 다음 exitssh로 다시 로그인하여 프로세스 목록을 다시 확인했는데 사라졌습니다. 플래그를 사용하거나 사용하지 않고 disown, 플래그를 사용하거나 사용하지 않고 시도했지만 -h셸을 종료할 때 프로세스가 사라지는 것을 막는 것은 없습니다.

screenor를 사용하여 이 작업을 수행 할 수 있지만 tmux기술적인 지식이 없는 직원이 로그인하여 실행할 수 있는 간단한 시작 스크립트를 설정하려고 합니다. 어떤 아이디어가 있나요?

(저는 Ubuntu 16.04.6 LTS를 실행하고 있습니다.)

편집: 누군가가 제안했습니다.이 문제, 그러나 @mathsyouth의 의견처럼 disown나에게는 효과가 없습니다. 이 질문에 대한 유일한 답변을 작성한 @Fox는 "사용 중인 프로그램이 여전히 종료되고 쉘 종료 시 거부된다면 이는 다른 문제인 것 같습니다."라고 말했습니다. (위에서 언급했듯이 그의 사용 제안은 screen내 사용 사례에 도움이 되지 않았습니다.)

답변1

tmux나 screen은 옵션이 아니기 때문에 systemd를 사용하는 것을 권장합니다. 예를 들어, 다음과 같이 즐겨 사용하는 편집기(nano, vim 등)를 사용하여 파일(예: sudo)을 생성합니다.

sudo nano /etc/systemd/system/myexecuteable.service

최소한 다음 내용을 포함해야 합니다.

[Unit]
Description=start my executable after multi-user target

[Service]
Type=simple
ExecStart=/path/to/my/executable

[Install]
WantedBy=multi-user.target

이제 두 가지 가능성이 있습니다.

  1. 실행 파일은 시스템이 시작될 때 시작되어야 합니다. 그런 다음 발행해야합니다sudo systemctl enable myexecutable.service
  2. 수동으로 시작하려고 합니다. 그런 다음 발행sudo systemctl start myexecutable.service

첫 번째 경우에는 "활성화"가 "시작"을 의미하지 않으므로 추가 "systemctl start" 명령을 실행하여 테스트해야 할 수도 있습니다.

세션을 종료하더라도 서비스는 실행됩니다. 실행 파일에 출력이 있는 경우(bash 파일에서 "로거" 사용) 언제든지 다음을 사용할 수 있습니다.journalctl -u myexecutable.service

관련 정보