UNIX 세계에서 screen/tmux를 Perl로 대체하시겠습니까?

UNIX 세계에서 screen/tmux를 Perl로 대체하시겠습니까?

screen/tmux와 같은 솔루션이 필요한 경우(프로세스를 오랜 시간 동안 실행하지만 nohup상호 작용이 필요할 수 있기 때문이 아님) - 주어진 시스템에서 screen/tmux를 사용할 수 없고 screen/tmux를 설치하는 것이 불가능할 때 발생합니다. 해결책?

Q: 이를 달성하기 위해(Linux/AIX/등에서) 보편적으로(또는 보편적이지 않게) 사용할 수 있는 "짧은" Perl 스크립트가 있습니까?

이것이 필요합니다:

  1. 펄 스크립트 시작
  2. 시간이 오래 걸리는 특정 작업을 시작하는 경우
  3. 예를 들어 업무용 노트북을 닫아야 하기 때문에 터미널 연결을 끊습니다.
  4. 콘솔에 다시 연결화면과 마찬가지로 실행되는 장기 실행 프로세스 보기/제어

그런 Perl 스크립트를 가지고 있는 사람이 있나요?

답변1

perlIO::Pty해당 모듈이 설치되어 있지 않으면 가장 적합하지 않을 수 있습니다.

첫째, 시간이 오래 걸리는 특정 작업(gtttlt)이 파이프와 잘 작동한다면 아마도 복잡한 것은 필요하지 않을 것입니다.

mkfifo input
nohup gtttlt <> input > output 2>&1 &

시작 gtttlt(명명된 파이프에서 입력, 일반 파일로 출력). 그럼 당신은첨부된다음으로 바꾸세요:

tail -f output & cat > input

expect배관이 작동하지 않고 터미널이 필요한 경우 의사 터미널을 시작하는 항목(예: , zshs zpty, perl's IO::Pty또는 다음) 을 사용해야 할 수 있습니다 sshd.

mkfifo input
nohup ssh -tt localhost gtttlt <> input > output 2>&1

그리고첨부된:

stty raw -echo; tail -f output & cat > input

screen이는 또는 구현과 다릅니다 tmux. screen그리고 tmux터미널 에뮬레이터를 구현하십시오. 다시 연결하면 터미널 에뮬레이터의 화면 내용이 표시됩니다. 여기에서 다시 연결하면 출력의 마지막 10줄만 표시됩니다( 옵션을 에 전달하여 -n 123조정할 수 있음 tail). 우리는 모든 데이터를 호스트 터미널과 주고받기만 하면 됩니다.

답변2

정확히 당신이 요청한 것은 아니지만 나는 at종종 그렇게 합니다. 나는 종종 랩톱에서 원격 서버에 대한 명령을 실행한 다음 명령 출력을 잃지 않고 랩톱을 종료하려고 합니다. at지정된 시간에 작업을 시작할 수 있으며 작업 출력 및 오류 스트림을 파일로 간단히 리디렉션할 수 있습니다.

예를 들어, 실행하고 싶다면 다음 과 같은 작은 파일을 my_script.pl생성합니다 foo.txt.

my_script.pl > out 2>er

그런 다음 실행

$ at now < foo.txt

그런 다음 서버에서 로그아웃하고 노트북을 집으로 가져간 후 ssh서버에 로그인하고 다음을 실행하여 출력을 확인할 수 있습니다.

$ tail -f er

또는

$ tail -f out

at셸에서 작업을 제공 할 수도 있습니다 ( CtrlD종료하려면 클릭).

$ at now
warning: commands will be executed using /bin/sh
at> my_script.pl > out 2>er
at> <EOT>
job 10 at Thu Sep  5 00:39:00 2013

답변3

위의 "at" 제안 대신 다음을 선호합니다.

  1. 평소처럼 Perl 스크립트 "perl script.pl"을 시작하세요.
  2. 사용자 상호 작용 작업을 수행하고 시간이 오래 걸리는 부분에 도달합니다.
  3. ctrl+z를 눌러 백그라운드로 두고 "bg"를 입력하세요. 이제 프로세스가 백그라운드에서 실행 중입니다.
  4. "작업"을 실행하여 프로세스 수를 확인하세요. 아마도 1.
  5. 현재 터미널에서 프로그램을 분리하려면 "disown %1"을 실행하십시오.
  6. 이제 터미널을 안전하게 닫을 수 있습니다("exit"를 입력하거나 닫기 버튼을 누르세요).

또한 출력을 파일이나 명명된 파이프로 리디렉션할 수 있습니다. 안타깝게도 프로세스를 터미널에 다시 연결할 수 있는 방법은 없는 것 같습니다.

관련 정보