시작 시 tmux 스크립트를 트리거할 수 없습니다.

시작 시 tmux 스크립트를 트리거할 수 없습니다.

아래에 설명된 대로 tmux 트리거 스크립트가 실행 중입니다.라즈베리파이 위지 7.10:

  • 1 단계

    #!/bin/bash
    # this script is called "sess"
    
    tmux new-session -d -s sess1 'sudo /home/pi/bin/myscript.py'
    exit 0
    

실행 중인 스크립트를 다음과 같이 확인했습니다.

  • 먼저 Python 스크립트를 실행 sudo /home/pi/bin/myscript.py 한 다음 다음을 입력하세요.멀티플렉서명령은 위와 같습니다 tmux new-session -d -s sess1 'sudo /home/pi/bin/myscript.py'. 스크립트가 두 번 실행됩니다.

사용자가 이 스크립트를 입력하고 실행할 수 있다면 전체 내용을 bash 스크립트로 작성할 수 있다고 가정하는 것이 안전하기 때문입니다. 그래서 위에서 언급한 "sess" 스크립트는

  • 2 단계

다음을 통해 파일에 대한 실행 권한을 부여했습니다.chmod +x /home/pi/bin/sess

  • 3단계

rc.local또한 다음을 사용하여 스크립트를 실행 해 보았습니다 .

# in the rc.local file 

/home/pi/bin/sess &
exit 0

내가 설정한 이후 rc.local파일이 트리거됩니다.무선 랜내 Pi가 Ad-Hoc 네트워크에 참여할 수 있도록 시작 시 매개변수입니다.

ssh 내 Pi에 들어갈 수 있기 때문에 이를 명확하게 확인할 수 있습니다 .

관찰 결과:

다시 시작한 후에는 스크립트가 트리거되지 않습니다. 이는 tmux ls다음 명령으로 확인할 수 있습니다 Connection to Server Failed. 또한 슈퍼유저가 incase를 사용하여 tmux 세션을 가지고 있는지 확인했지만 sudo tmux ls출력은 동일합니다.

  • 4단계

다음을 사용하여 스크립트를 실행하려고합니다 crontab.

sudo crontab -u pi -e

## inside the crontab

@reboot /home/pi/bin/sess &

나는 또한예약 된 일들슈퍼유저용

sudo crontab -e

@reboot /home/pi/bin/sess &

관찰 결과:

재부팅 후에는 스크립트가 실행되지 않습니다.

  • 5단계

나는서브쉘rc.local트리거되는 스크립트의 모든 활동을 캡처합니다 .

# in the rc.local file
(/home/pi/bin/sess &) > /tmp/tmux.log

관찰 결과

다시 시작하면 cat /tmp/tmux.log파일에 아무것도 없습니다. 파일이 tmux.log실제로 생성되었습니다.

추론

아이러니 sudo /etc/rc.local하게도 내가 실제로 연결 세션을 사용 하고 목록을 볼 수 있기 때문에 로그인할 때 sudo ~/bin/sess스크립트가 완벽하게 실행됩니다.sudo tmux asudo tmux ls

하지만 시작 시 실행되지 않기 때문에 시작 시 트리거되지 않으면 그 목적은 쓸모가 없습니다.

$PATH실제로 어떤 환경변수가 표시되는지도 확인했습니다 /home/pi/bin.

또한 환경 변수가 정렬되지 않을 수 있으므로 모든 스크립트에서 tmux에 대한 전체 경로를 사용해 보았습니다. 하지만 행운은 없어

$ which tmux
$ /usr/bin/tmux

아이러니하게도 내가 내 말을 따르면우분투 14.04 LTSrc.local내 파일을 통해 노트북 스크립트가 트리거됩니다.

더 많은 선택

  1. 어쩌면 데몬 스크립트를 시도해 보세요. an 과 a가 이것을 처리할 수 있는지 init.d/확실하지 않으면 데몬도 처리하지 못할 수도 있습니다.rc.localcrontab

  2. ~/.tmux.confa가 좋은지 모르겠습니다 .

답변1

최적화된 솔루션으로 분리된 스크립트 문제 해결멀티플렉서트리거 스크립트에서 다음 옵션을 사용하라는 메시지가 표시됩니다.

#!/bin/bash
# this script is called "sess"

tmux new-session -d -s sess1

# this statement is a life-saver for tmux detached sessions
tmux set-option -t sess1 set-remain-on-exit on

# In my case running the script in a new window worked
tmux new-window -d -n 'nameofWindow' -t sess1:1 'sudo /home/pi/bin/script.py'

exit 0

이제 다음 스크립트를 호출하면 rc.localPi가 재부팅됩니다. 결국 재부팅 시 Once를 사용하여 세션을 연결하면 sudo tmux atmux 세션이 생성됩니다.창문 2개

  1. 초기 세션은 다음으로 인해 트리거된 빈 세션입니다.tmux new-session -d -s sess1

  2. 다른 하나는 tmux new-window명령 에서 나오며 다음과 같이 언급된 대로 CTRL++를 사용 B하여 열 수 있습니다 .1sess1:1노트:단축키는 사용자마다 다를 수 있으며, 기본 tmux 단축키(키 바인딩)는 CTRL+ 입니다 B.

추리

스크립트가 오류로 끝나면 창에는 오류가 발생한 위치(제 경우에는 Python 스크립트의 오류)와 하단에 표시됩니다.페인이 죽었어. 그래서 스크립트의 버그로 인해멀티플렉서관련 로그(피드백)를 제공하지 않고 세션이 종료되므로 위의 출력은 기록되지 않습니다./tmp/tmux.log

set-remain-on-exit on따라서 분리 모드의 스크립트에 오류가 발생할 경우를 대비하여 tmux를 사용하여 스크립트를 실행할 때 항상 권장됩니다.

관련 정보