분리된 tmux 세션에서 2개 이상의 함수가 포함된 파일에서 특정 함수 실행

분리된 tmux 세션에서 2개 이상의 함수가 포함된 파일에서 특정 함수 실행

저는 Bash와 함께 Ubuntu 16.04를 사용하고 있으며 다양한 기능이 포함된 파일을 가지고 있습니다. 이러한 기능 사이에는 다음이 있습니다.

tdm() {
    chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/
    sleep 2h
    chmod -R 000 "$drt"/phpmyadmin/
    tmux kill-session
}

이 기능은 phpmyadmin(PMA)을 설치한 후,한계보안상의 이유로 chmod /usr/share/phpmyadmin 000 -R위 함수에서는 2시간 동안 PMA를 일시적으로 허용합니다(일반적으로 데이터베이스를 변경하는 데는 2시간이면 충분합니다). 따라서 이름은 TDM(임시 데이터베이스 관리)입니다.

이 함수는 호출되지 않습니다. tdm포함된 파일을 가져온 후 실행을 통해 CLI에서 직접 호출하기 때문에 그렇지 않습니다 .


내 질문

내 문제는 sleep함수 내부의 명령으로 인해 콘솔을 사용할 수 없다는 것입니다(포그라운드 변경으로 인해 콘솔이 중지됨 sleep).

tdm따라서 분리된 세션에서 실행 해야 하며 2시간 동안 (콘솔에서 작업을 중단하지 않고) 권한을 / 로 tmux변경한 다음 PMA를 다시 잠그고 분리된 세션을 종료합니다 .755644sleeptmux

내가 여기서 사용하는 유일한 이유 는 위에서 언급한 것처럼 유틸리티가 내가 사용 중인 현재 세션을 중단하지 않기 tmux때문입니다 .sleep


지금까지 내가 생각한 것

1 - tmux 대신 Bash 배경 사용:

해당 부분을 제거 tmux하고 백그라운드에서 함수를 호출 할 수 있지만 &매개변수 없이 함수를 실행하고 싶지는 않습니다.

2 - 특수 파일:

tdm분리된 세션에서 실행하는 한 가지 방법은 tmux서브루틴을 스크립트에 넣는 것입니다.특수 파일alias, 해당 파일에 대한 파일을 만들고 직접 실행합니다.

1)특수 파일 만들기:

$HOME/tdm.sh

2)alias다음 항목에 하나 추가 "$HOME"/.bashrc:

alias tdm="tmux new-session -d 'bash $HOME/tdm.sh'"

삼)원천 bashrc:

source "$HOME"/.bashrc

4)별칭 사용:

tdm

하지만 저는 함수를 전용 파일의 스크립트에 넣고 싶지 않습니다. 다른 함수가 포함된 현재 파일에 보관하고 싶습니다.


내 질문

tmux다른 기능이 포함된 파일 내부의 독립 실행형 세션에서 이 기능을 어떻게 실행할 수 있나요 ?

고쳐 쓰다

disown또는 솔루션 nohup이 좋을 수 있습니다. 인수 없이 함수 만 실행하는 한 , 또는 tdm로 작업이 완료되었는지는 상관하지 않습니다 .disownnohuptmux

답변1

사용존재하다;

tdm() {
  chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/ && \
  echo "chmod -R 000 \"$drt\"/phpmyadmin/" | at "now + 2h"
}

또는그리고

북면

tdm() {
  chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/ && \
  nohup "sleep 2h; chmod -R 000 \"$drt\"/phpmyadmin/" &
}

또는화면

tdm() {
  chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/ && \
  screen -S tdm -d -m "sleep 2h; chmod -R 000 \"$drt\"/phpmyadmin/"
}

또는멀티플렉서

tdm() {
  chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/ && \
  tmux new -d -s tdm "sleep 2h; chmod -R 000 \"$drt\"/phpmyadmin/"
}

답변2

귀하가 하려는 작업을 제가 이해한다면 귀하가 사용하고 있는 도구가 해당 작업에 비해 너무 강력한 것입니다. 단일 단순 스크립트에 대해서만 전용 세션을 생성하는 대신 tmux명령줄에서 해당 스크립트를 사용하고 실행하세요.nohup &disown

nohup tdm DRT & disown

답변3

이것이 당신이 요구하는 것인지 확실하지 않지만 분리된 세션에서 실행하려는 명령에 인수를 직접 전달할 수 있습니다.

tmux new-session -n:myTest 'chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/;sleep 2h;chmod -R 000 "$drt"/phpmyadmin/'

답변4

댓글에서 Rich 사용자는 다음과 같은 솔루션을 제안했지만 답변을 공개하지 않는 것을 선호합니다.

나는 그가 무슨 뜻인지 이해합니다.

tdm() {
    chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/
    echo "chmod -R 000 $drt/phpmyadmin/" | at now + 2 hours
}

관련 정보