로그아웃한 후에도 계속 실행하고 싶은 실행 파일(Unity로 만든 서버)이 있습니다. 모든 인터넷에서는 nohup
둘 중 하나 또는 둘 다를 통해 disown
이 작업을 수행 할 수 있어야 한다고 말합니다. 그러나 이것은 작동하지 않습니다. 나는 다음을 원한다:
nohup /usr/bin/myexecutable &
disown -h
이 시점에서 프로세스 목록을 확인해보면 나의 프로세스가 실행되고 있는 것입니다. 그런 다음 exit
ssh로 다시 로그인하여 프로세스 목록을 다시 확인했는데 사라졌습니다. 플래그를 사용하거나 사용하지 않고 disown
, 플래그를 사용하거나 사용하지 않고 시도했지만 -h
셸을 종료할 때 프로세스가 사라지는 것을 막는 것은 없습니다.
screen
or를 사용하여 이 작업을 수행 할 수 있지만 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
이제 두 가지 가능성이 있습니다.
- 실행 파일은 시스템이 시작될 때 시작되어야 합니다. 그런 다음 발행해야합니다
sudo systemctl enable myexecutable.service
- 수동으로 시작하려고 합니다. 그런 다음 발행
sudo systemctl start myexecutable.service
첫 번째 경우에는 "활성화"가 "시작"을 의미하지 않으므로 추가 "systemctl start" 명령을 실행하여 테스트해야 할 수도 있습니다.
세션을 종료하더라도 서비스는 실행됩니다. 실행 파일에 출력이 있는 경우(bash 파일에서 "로거" 사용) 언제든지 다음을 사용할 수 있습니다.journalctl -u myexecutable.service