현재 세션 내의 새로운 tmux 세션에서 코드를 실행하는 방법은 무엇입니까?

현재 세션 내의 새로운 tmux 세션에서 코드를 실행하는 방법은 무엇입니까?

저는 Ubuntu 16.04를 사용하고 있으며 특정 경우에는 만족스럽지 않고 오류가 발생하기 tmux때문에 시간 초과가 있는 프로세스를 실행하고 싶기 때문에 다음 솔루션이 필요합니다 (결합 시 ). 현재 로서는 자체적인 기능이 있으므로 최선의 선택인 것 같습니다.sleepatnohupnohup-sleeptmux잠깐만메커니즘이며 실제로 수동 사용 시 꽤 잘 작동합니다. (저는 이미 수동으로 수행할 수 있는 프로세스 자동화에 대해서만 묻고 있습니다.)

나는 필요하다:

다음 3가지 작업을 모두 한 번에 수행할 수 있는 방법이 필요합니다.

  1. tmux세션을 연결합니다.
  2. 해당 세션에 준비된 명령 세트를 삽입합니다 (sleep 30m ; rm -rf dir_name ; exit). 예를 들어 저는 특히 하나의 긴 줄보다는 여러 줄 세트를 좋아합니다.
  3. tmux위 명령을 실행하면 새 세션의 표준 입력에 기록됩니다.

즉, tmux이 목적을 위해 특별히 생성된 다른 세션에서 코드 세트를 실행하고 싶지만 이 모든 작업을 한 번의 작업으로 수행합니다.


노트:

  • 내 목표는 초기 작업 세션(대부분의 시간을 작업에 소비하는 세션)부터 모든 작업을 완료하는 것입니다. 일반적으로 말하면 새로 생성된 세션에 액세스할 의도가 없으며 자동화된 코드를 사용하여 세션을 생성하고 싶을 뿐입니다.

  • 가능하다면 heredoc 솔루션을 선호합니다. 나는 이것이 가장 효과적이라고 생각합니다.

답변1

실행하려는 코드를 다음과 같이 넣으면 /opt/my_script.sh원하는 작업을 쉽게 수행할 수 있습니다 .

tmux new-session -d -s "myTempSession" /opt/my_script.sh

그러면 "myTempSession"이라는 새로운 분리 세션이 시작되고 스크립트가 실행됩니다. 나중에 추가하여 수행 중인 작업을 확인할 수 있습니다 tmux attach-session -t myTempSession.

저것제 생각에는 이것이 가장 간단하고 우아한 솔루션입니다. tmux를 사용하여 stdin("여기 문서에서" 읽기)에서 명령을 실행하는 쉬운 방법을 모르겠습니다. 해킹을 사용하면 그렇게 할 수도 있지만 여전히 해킹입니다(그리고 해킹처럼 보입니다).

예를 들어, 위에서 제안한 명령을 사용하여 원하는 동작을 시뮬레이션하는 해킹이 있습니다. (= heredoc의 새 tmux 세션에서 코드를 실행합니다. 임시 파일이 생성되는 동안 서버의 하드 드라이브에 쓰기가 발생하지 않습니다. , /dev/shm즉 tmpfs):

(
  cat >/dev/shm/my_script.sh &&
  chmod +x /dev/shm/my_script.sh &&
  tmux new-session -d '/dev/shm/my_script.sh; rm /dev/shm/my_script.sh'
) <<'EOF'
    echo "hacky, but works"
EOF

답변2

또한보십시오https://serverfault.com/questions/339390/run-command-in-detached-tmux-session사용 예키 보내기창에서 명령을 분리합니다.

답변3

위의 솔루션을 혼합하여 동일한 결과를 얻을 수 있는 다른 방법을 생각해 냈습니다(bash 가정).

#!/bin/bash

wantTmuxExecute() {
   sleep 30m ;
   rm -rf dir_name ; 
   ...
}
# send to tmux
type wantTmuxExecute | tail -n +2 > /dev/shm/wantInTmux.sh

# execute tmux
tmux new-session -d 'source /dev/shm/wantInTmux.sh ; rm /dev/shm/wantInTmux.sh'
tmux send-keys 'wantTmuxExecute'

관련 정보