첨부하지 않고 화면 생성 및 명령 실행

첨부하지 않고 화면 생성 및 명령 실행

저는 스크린 세션에서 실행 중인 스크립트를 시작하고 중지하는 것과 관련된 유지 관리 루틴을 자동화하는 작업을 하고 있습니다. 내 접근 방식은 화면 세션을 종료한 다음 다시 시작하고 화면을 생성하고 화면에 연결할 필요 없이 명령을 전달하는 기능을 사용하여 스크립트 내에서 명령을 실행하는 것입니다.

그러나 나는 이것에 어려움을 겪고 있습니다. 를 사용하여 첨부하지 않고도 화면을 올바르게 만들 수 있습니다 screen -d -m -S screen_name. 그러나 다음을 기반으로 명령을 실행하면:

screen -S screen_name-X stuff "command 1"'echo -ne '\015''"command 2"'echo -ne '\015''

echo -ne '\015' 는 작은따옴표가 아닌 역따옴표로 묶입니다. 내가 사용하는 명령이 디렉토리로 이동하고 거기에 있는 스크립트를 실행하는 것처럼 사용자가 Enter 키를 누르는 것을 시뮬레이션하는 것입니다. 이 명령은 작동하지만 화면이 생성된 후 연결된 경우에만 작동합니다. 화면을 생성하고 그 안에서 명령을 실행하는 과정을 자동화하려고 하기 때문에 스크립트 내에서 연결하거나 분리할 필요가 없도록 하고 싶습니다. 화면 내에서 실행하고 결과에 따라 편집해야 하는 명령이 포함된 셸 스크립트를 만드는 방법을 제안해 보겠습니다.

하나의 명령으로 화면을 생성하고 화면 내에서 명령을 실행하는 방법이 있습니까? 아니면 생성 후 명령 실행 전에 화면에 연결하지 않고도 화면 내에서 명령을 실행할 수 있습니까?

미리 감사드립니다.

**업데이트 - 쉘 스크립트 내에서 실행해야 하는 명령을 배치하라는 제안을 시도한 후 화면을 성공적으로 생성하고 화면 내에서 명령을 실행할 수 있었지만 스크립트 실행이 중지되면 동작이 발생합니다. 화면도 닫힙니다. 스크립트는 시스템 관리자에 대한 지식이나 개발하려는 스크립트를 통해서만 중지되어야 하는 로깅 스크립트이므로 문제가 되지 않습니다. 그러나 화면이 다음과 같이 설정되는 것이 바람직합니다. 스크립트가 중지되어도 사라지지 않습니다. 이 행동을 달성하는 것이 가능합니까? **

답변1

여러 가지 문제에 봉착할 수도 있을 것 같아요.

다시 연결하기 전에 명령이 완료되면 화면이 사라집니다. 다음을 사용하여 이를 시연할 수 있습니다.

screen -d -m ls -l

명령 을 실행 ls -l하지만 screen -list화면 프로세스가 종료되면 표시되지 않습니다.

나는 또한 당신이 이 \015 물건으로 무엇을 하려는지 전혀 모릅니다. 아마도 귀하의 질문을 업데이트하는 것이 도움이 될 것입니다. 귀하가하려는 것은 스크린 세션에서 여러 명령을 실행하는 것이기 때문입니다. 이는 다음과 같이 간단해야 합니다.

screen -d -m bash -c "command1 ; command2 ; command3"

이러한 명령이 많이 사용된다면 아마도 이러한 명령만 실행하는 쉘 스크립트를 만든 다음 더 간단한 명령을 사용해야 할 것입니다.

screen -d -m /path/to/script.sh

답변2

분리된 화면 시작

screen -dmS <screen name>

이전에 생성된 분리된 화면에서 명령 실행

screen -S <screen name> -X stuff '<CMD>\n'

예, 명령을 제출하려면 Enter 기호를 입력해야 합니다. 그렇지 않으면 화면에 문자열만 추가됩니다.

http://osdir.com/ml/gnu.screen/2003-09/msg00029.html

답변3

-c이것은 작동하지 않고 나를 위해 일했습니다.

screen -d -m bash -c "command1; command2; command3"

답변4

이전 답변을 테스트하는 복사하여 붙여넣기 방법은 다음과 같습니다.

 # No sessions:
screen -ls

 # Returns immediately:
time screen -dmS screen_descritive_session_name  bash -c 'sleep 20; hostname >> /tmp/h'

 # New session present:
screen -ls

 # File with return of command was created :)
sleep 20; cat /tmp/h

예상 결과는 다음과 유사해야 합니다.

No Sockets found in /var/run/screen/S-yourusernamehere.

(즉, 이전에 화면 세션이 생성되지 않았음을 의미합니다)

real    0m0.002s
user    0m0.000s
sys     0m0.000s

(화면을 만들고 떼어내는 데 걸리는 시간입니다. 거의 순간적입니다.)

There is a screen on:
    20318.screen_descritive_session_name    (20/08/2018 16:29:35)   (Detached)
1 Socket in /var/run/screen/S-yourusernamehere.

(이 출력은 사용 가능한 화면 세션을 보여줍니다. 마지막 명령에서 생성되었습니다.)

sleep 20; cat /tmp/h

(이것은 catgnu-screen 내에서 실행된 호스트 이름을 보여줍니다)

관련 정보