답변:
두 가지 주요 선택 사항이 있습니다.
로 명령을 실행하십시오 nohup
. 세션에서 연결이 끊어지고 연결을 끊은 후에도 계속 실행됩니다.
nohup pythonScript.py
명령의 stdout은 nohup.out
사용자가 경로 재지 정하지 않는 한 호출 된 파일에 추가됩니다 ( nohup pythonScript.py > outfile
).
와 같은 화면 멀티플렉서를 사용하십시오 tmux
. 이렇게하면 원격 컴퓨터와의 연결을 끊을 수 있지만 다음에 연결할 때 tmux attach
다시 실행 하면 정확히 같은 세션에있게됩니다. 명령은 여전히 실행 중이며 (로그 아웃 할 때 계속 실행 됨) 로그 아웃하지 않은 것처럼 stdout 및 stderr을 볼 수 있습니다.
tmux
pythonScript.py
일단 시작하면 PuTTY 창을 닫으십시오. 그런 다음 다음 날 다시 연결하고 다시 실행 tmux attach
하면 시작한 곳으로 돌아갑니다.
disown
2.screen
byobu
tmux 또는 화면을 감싸는 래퍼를 언급 할 가치가 있습니다.
screen
모든 리눅스 배포판에 사용할 도구는이를 지원합니다.
이를 설치하려면 apt-get install screen
deb 기반 Linux 배포판 dnf install -y screen
또는 yum install -y screen
RPM 기반 배포판을
실행하십시오 .
쓰다:
$ screen
새로운 쉘이 시작됩니다. 이 셸에서 Python 스크립트를 시작할 수 있습니다. 그런 다음 Ctrl+ Shift+ A를 누른 다음을 누를 수 있습니다 D. 스크립트를 실행하는 쉘에서 터미널을 분리합니다. 또한 스크립트는 여전히 실행 중입니다.
스크립트가 어떻게 실행되는지 확인하려면을 호출하십시오 screen -r
. 백그라운드에서 실행 한 Python 스크립트를 사용하여 터미널을 쉘에 다시 연결합니다.
UPD : Fox가 언급했듯이 screen은 systemd에서 제대로 작동하지 않지만 systemd를 사용하여 공식 예제 에서 말하는 것처럼 스크립트를 시작할 수 있습니다 .
예를 들어로 스크립트를 시작하면 다음 /usr/bin/myPythonScript
과 같이 Systemd 단위 파일을 만들 수 있습니다.
$ cat /etc/systemd/system/myPythonScript.service
[Unit]
Description=MyPythonScript
[Service]
ExecStart=/usr/bin/myPythonScript
[Install]
WantedBy=multi-user.target
이 스크립트를 시작할 수 있습니다
# systemctl daemon-reload
# systemctl start myPythonScript
시스템 시작시이 스크립트를 자동으로 시작하려면-
# systemctl enable myPythonScript
스크립트 실행 방법을 언제든지 볼 수 있습니다
# systemctl status myPythonScript
스크립트 로그를 검토 할 수있는 광고
# journalctl -u myPythonScript -e
screen
와 정확하게 잘 재생되지 않는 systemd
기본 구성에. 내가 만약 우분투의 용도를 모른다 systemd
, 그러나 행동과 해결 방법은 답변에서 언급 할만큼 가치있을 수 있습니다
대부분의 프로세스는 stdout, stderr, stdin (모든 디스크립터가 항상 경로 재 지정에 필요한 것은 아님)을 재지 정하고 &
제어 연산자를 사용하여 속일 수 있습니다 .
ping example.com 1>/dev/null &
그 일을 참조하십시오 .
물론 일부 프로그램은 더 정교하며 @terdon과 같은 솔루션이 필요하지만 가장 적합한 것을 알고 사용하는 것이 좋습니다.
편집 :에 작성된 이 답변 죽이고 systemd
로그 아웃 프로세스를. systemd
기본적으로 로그 아웃시 킬 프로세스 의 일부 버전은 그렇지 않습니다. 이 옵션은 다음 옵션을 설정하여 /etc/systemd/logind.conf를 수정하여 변경할 수 있습니다. 서면으로, @terdon의 솔루션과 관련하여 발생할 수있는 일부 문제를 해결할 수도 있습니다.
부터 man logind.conf
:
KillUserProcesses=
부울 인수를 취합니다. 사용자가 로그 아웃 할 때 사용자 프로세스를 종료해야하는지 여부를 구성합니다. true 인 경우 세션에 해당하는 범위 단위 및 해당 범위 내의 모든 프로세스가 종료됩니다. False 인 경우 범위가 "중단됨", systemd.scope (5)를 참조하고 프로세스가 종료되지 않습니다. 기본값은 "yes"이지만 옵션
KillOnlyUsers=
및KillExcludeUsers=
아래를 참조하십시오 .세션 프로세스 외에도 사용자 프로세스는 사용자 관리자 유닛 user @ .service 하에서 실행될 수 있습니다. 느린 설정에 따라 사용자가 로그인 세션과 독립적으로 프로세스를 실행할 수 있습니다. 의 설명을 참조하십시오
enable-linger
에서loginctl
(1).세션 범위를 벗어나지 않으면 (1) 및 (1) 과
KillUserProcesses=yes
같은 도구 를 설정 하면 설정 이 중단 됩니다. (1)의 예를 참조하십시오 .screen
tmux
systemd-run
자세한 내용은 링크 된 답변을 읽으십시오.
isatty()
하고 있지 않은 경우 종료합니까?"입니다.
nohup
.