저는 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를 다시 잠그고 분리된 세션을 종료합니다 .755
644
sleep
tmux
내가 여기서 사용하는 유일한 이유 는 위에서 언급한 것처럼 유틸리티가 내가 사용 중인 현재 세션을 중단하지 않기 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
로 작업이 완료되었는지는 상관하지 않습니다 .disown
nohup
tmux
답변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
}