가장 높은 Bash 세션에서 시간 제한이 있는 표준 출력을 인쇄하는 "at" 또는 "sleep" 유틸리티 만들기

가장 높은 Bash 세션에서 시간 제한이 있는 표준 출력을 인쇄하는 "at" 또는 "sleep" 유틸리티 만들기

현재 시간(예: 시간 초과)보다 2시간 앞서 일련의 명령을 실행하고 싶습니다.

  1. 이 명령이 시간 초과되면 Bash를 정기적으로 계속 사용해야 합니다(즉, 이 명령은 백그라운드에서 실행되어야 합니다 &).

  2. 마지막으로 명령의 표준 출력을 모든 세션의 계층 구조에서 가장 높은 세션 터미널에 인쇄해야 합니다.


내가 이 일을 하고 싶은 이유:

보안상의 이유로 PHPmyadmin(PMA)을 설치하고 2시간 후에 제거하는 스크립트의 일부로 이 작업을 수행해야 합니다. 이 솔루션은 정보 보안 분야의 여러 사람들이 나에게 추천했습니다. 일부는 포트 3306 필터링과 결합된 경우 HTTPS를 추가하기도 합니다.


처음에는 해결책인 것 같았습니다.

sleep또는 유틸리티를 사용하여 명령 시간 초과를 설정할 수 있습니다 at. 다음을 참조하세요.

cat << EOF
sudo nohup sleep 2h
echo "hello"
echo "welcome"
EOF

또는:

cat << EOF | sudo at 'now + 2 hours'
echo "hello"
echo "welcome"
EOF

이러한 방법의 문제점(사실):

문제는 이러한 명령이 백그라운드에서 실행되지 않고 표준 출력이 계층 구조에서 가장 높은 세션의 터미널에 인쇄되지 않는다는 것입니다.


노트:

  • "가장 높은 세션", "계층 구조에서 가장 높은 세션" 또는 "첫 번째 세션"이라고 말하는 것은 실수로 또는 의도적으로 세션 창을 닫는 것(또는 다른 유사한 이유로 인해 명령의 원래 세션이 손실될 수 있음을 강조하기 위한 것입니다. 갑작스러운 재부팅) 손실 또는 2분의 정전), 이 경우 세션 계층 구조의 첫 번째 세션인 다른 세션을 시작할 수 있습니다.앞으로명령의 시간 제한은 2시간입니다.

답변1

Linux는 장치부터 저장소까지 파일 형태로 tty모든 것을 처리합니다.

따라서 출력을 다음과 같은 파일로 보내는 것이 좋습니다 tty.

cat << EOF | sudo at 'now + 2 hours' | tee /var/tmp/at_output.log
echo "hello"
echo "welcome"
less /var/tmp/at_output.log
EOF

이제 해야 할 일은 스크린 세션이나 cat 또는 tail과 같은 텍스트 뷰어를 통해 출력 파일을 보는 것뿐입니다.

예를 들어, tail -f /var/log/at_output.log현재에서 실행 tty하면 마지막 10줄부터 시작하는 실시간 출력이 표시됩니다.

또한 전환할 때 에서 볼 수도 있습니다. screen먼저 다음을 생성해야 합니다.

screen세션 유형을 생성하려면 :screen -S at_proc

명령 실행을 중단하지 않고 연결 및 연결 해제가 가능하고 기록을 유지하여 중단 없이 명령을 실행할 수 있는 screen휴대용 세션이 표시됩니다 .tty

screen세션 연결을 끊으려면 ctrl+ a+ 를 클릭하세요 d.

세션에 다시 연결하려면 을 입력하고 screen -r at_proc, 유일한 세션인 경우 을 입력하면 됩니다 screen -r.

화면 세션이 끝나면 다시 연결하고 일반 에서처럼 + 키를 exit누르세요 .ctrldtty

관련 정보