SSH 세션에서 로그아웃하고 X 서버가 필요한 프로그램 계속 실행

SSH 세션에서 로그아웃하고 X 서버가 필요한 프로그램 계속 실행

정기적으로 png 이미지를 생성하고 브라우저를 통해 액세스할 수 있는 서버에 배치하는 Python 스크립트가 있습니다. 이 이미지는 서버에서 실행 중인 작업의 진행 상황을 보여줍니다. matplotlib을 사용하여 이미지를 생성하고 있습니다.

Python 스크립트는 각 이미지를 생성한 후 절전 모드로 전환됩니다. 한 시간 후에는 깨어나서 새로운 이미지를 생성하고 다시 절전 모드로 전환됩니다.

SSH 세션을 통해 스크립트를 시작합니다. 로그아웃하면 스크립트가 종료됩니다. 이 문제를 다루는 다른 스레드를 읽었지만 제안된 해결 방법이 작동하지 않습니다. 다음 명령어로 스크립트를 실행해도 로그아웃 후 스크립트가 종료됩니다.

nohup script.py &> job-monitor.log &

아니면 이렇게 달리면

script.py
[Ctrl-Z]
disown -h %1
bg 1

이상한 점은 로그아웃했다가 다시 로그인하면 스크립트가 더 이상 실행되지 않고 job-monitor.log가 비어 있다는 것입니다.

어떤 일이 발생할 수 있으며 로그아웃 후에도 스크립트가 계속 실행되도록 하려면 어떻게 해야 합니까?

추가 정보: 문제는 제가 사용하고 있는 플로팅 라이브러리 matplotlib와 관련이 있는 것 같습니다. 그래픽이 방금 디스크에 저장되었음에도 불구하고 png를 생성하려면 X 세션이 필요할 수 있다고 생각합니다.

답변1

문제가 matplotlib에 있는 경우(즉, 연결 상태를 유지하는 경우 스크립트가 응답을 제공하지 않거나 ssh가 Xwindow 연결을 전달하기 때문에 작동하는 경우) matplotlibrc 파일에 넣어야 합니다.

backend : AGG

이렇게 하면 스크립트가 작동하는 데 Xwindow가 필요하지 않습니다.

답변2

세션 모니터링을 위해 또는 를 IO/redirecting사용하는 대신 .tmuxscreen command

답변3

time.sleep()스크립트의 해당 부분을 폐기하고 주기적 및/또는 지연된 호출에 사용하도록 겸손히 제안해도 cron될까요 at?

이는 코드를 단순화하고 SSH 세션 분리에 대한 종속성을 안전하게 제거하며 이미지 생성 및 예약 문제를 분리합니다.

nohup스크립트 종료 관련: 후속 스크립트 에는 스크립트가 시작된 디렉터리에 대한 쓰기 액세스 권한이 없거나 기존 로그 파일이 루트 소유이므로 액세스할 수 없기 때문에 로그 파일에 대한 쓰기 액세스 권한이 없는 것으로 의심됩니다 .

직장을 그만둬야 할지 모르겠고그 다음에bg그것에 반대하는 주장을 시도하는 것은 효과가 있을 것입니다. 나는 항상 그 반대로 행동합니다. foo & disown %1당신과 같은 상황에서는 완전히 작동합니다.

답변4

또한 STDIN을 리디렉션해 보세요. 스크립트가 표준 입력에서 읽는 중일 수 있으므로 셸을 닫으면 표준 입력이 사라지고 또 사라집니다.

script.py </dev/null &>/dev/null &
disown

관련 정보