화면을 사용하지 않고 터미널에서 프로세스를 시작하려면 cron을 사용하시겠습니까?

화면을 사용하지 않고 터미널에서 프로세스를 시작하려면 cron을 사용하시겠습니까?

cron을 사용하여 터미널에서 프로세스를 시작하고 싶습니다. 터미널에서 프로세스의 출력을 지속적으로 확인하고 종료/다시 시작 등을 할 수 있도록 프로세스가 터미널에서 시작되기를 원합니다. "screen -p -X stuff"를 사용하여 화면을 통해 이 작업을 수행할 수 있다는 것을 알고 있지만 최근에 화면이 멈추는 이상한 문제가 발생했습니다(화면 세션이 정지되고 출력이 중지되지만 프로세스는 계속 실행됩니다. 화면을 재활용할 수 있나요?) 화면을 사용하지 않고 터미널에서 cron을 통해 프로세스를 시작하는 방법이 있는지 궁금하십니까? 도움이 될 경우 터미널을 미리 생성하고 수동으로 이름을 바꿀 수 있습니다.

답변1

다음은 새로운 pty 설명자를 가져와 표준 출력 unlockpt()에 쓰는 솔루션입니다 .ptsname()

<<\C cc -xc - -o pts
#include <stdio.h>
int main(int argc, char *argv[]) {
        if(unlockpt(0)) return 2;
        char *ptsname(int fd);
        printf("%s\n",ptsname(0));
        return argc - 1;
}
C

단지 작은 C 프로그램을 컴파일하고 unlockpt()stdin 호출을 시도하며, 성공하면 새로 생성되고 잠금 해제된 pty의 이름을 인쇄하고, 그렇지 않으면 stdout자동으로 2를 반환합니다.

Linux 시스템의 경우 - 적절한 권한 부여(일반적으로 그룹 에 자신을 추가하면 tty가장 쉽게 달성할 수 있습니다.)- 새로운 pty 설명자를 쉽게 얻을 수 있습니다...

exec 3<>/dev/ptmx

./...그리고 위 프로그램을 컴파일했다고 가정하고 현재 셸에서 메인 측 fd를 가져옵니다 .

slave=$(./pts <&3)

...새 설명자를 실제로 사용할 수 있게 만들고 해당 장치 이름을 쉘 변수 값에 넣습니다 $slave.

다음으로 제공util_linux패키지가 시스템에 설치되면 setsid()거기에 새 프로세스를 설치할 수 있습니다. 예를 들면 다음과 같습니다.

setsid -c sh 3>&- <>"$slave" >&0 2>&1

대화형 프로세스를 시작 sh하고 pty의 세션 리더로 종료되며 기본적으로 대화형 셸의 배경 역할을 합니다. 배경 쉘은 >&3사용자 입력으로 작성된 모든 것을 해석합니다. 특히 유용한 것을 작성하는 것은 다음과 같습니다:

echo "exec >$(tty) 2>&1" |
cat   - /dev/tty    >&3

일시적으로 배경 셸과 해당 하위 항목의 모든 출력을 현재 터미널로 리디렉션하는 동시에 모든 키보드 입력이 존재하는 한 다시 배경 셸로 리디렉션합니다 cat. 그러나 /dev/tty슬레이브에서는 배경 쉘이 pty이므로 다음과 같이 현상 유지가 쉽습니다.

echo 'exec >/dev/tty 2>&1' >&3

에서도 동일한 작업을 수행할 수 있지만 cron물론 I/O를 스크립팅하거나 일부 파이프 릴레이를 설정하여 자동으로 수행할 수도 있습니다.

바라보다이 pty를 어떻게 구하고 어떻게 할 수 있나요?더 알아보기.

관련 정보