부팅 시 사용자를 TTY에 자동 로그인한 다음 GNU 화면 내에서 명령을 자동 실행합니다.

부팅 시 사용자를 TTY에 자동 로그인한 다음 GNU 화면 내에서 명령을 자동 실행합니다.

우분투 14.04.5 LTS

원하는 기능: 원격 Ubuntu 서버가 부팅되고 지정된 사용자로 진행 중인 프로세스가 자동으로 시작됩니다. 그런 다음 나중에 원격으로 로그인하여 진행 중인 프로세스의 과거 및 현재 화면 출력을 볼 수 있습니다.

현재 계획:

자동화된 단계:

  1. 사용자 "ubuntu"는 부팅 시 터미널(TTY)에 자동으로 로그인됩니다.

    "sudo nano /etc/init/tty1.conf"
    
    Change: exec /sbin/getty -8 38400 tty1
    
    To: exec /sbin/getty --autologin ubuntu -8 38400 tty1
    
  2. 사용자 "ubuntu"는 GNU 화면을 실행합니다:

    screen -d -m -S screenname
    
  3. 사용자 "ubuntu"는 GNU 화면 내에서 진행 중인 프로세스를 실행합니다.

    screen -S screenname -p 0 -X stuff "command^M"
    

나중에 수동으로 수행할 단계:

  1. 다른 터미널(TTY)에 "ubuntu" 사용자로 원격으로 로그인합니다.
  2. 2단계에서 시작된 GNU 스크린 세션에 다시 연결합니다.

    screen -r
    
  3. 3단계에서 시작된 프로세스의 과거 및 현재 출력을 볼 수 있습니다.

질문:

  • 이것이 원하는 결과를 얻는 가장 효과적인 방법입니까?
  • 2단계와 3단계의 명령을 어떻게 자동화할 수 있나요?
  • 2단계와 3단계의 명령을 어떻게 사용할 수 있나요?~ 아니다4단계에서 수동으로 로그인하면 활성화됩니까?

답변1

답변(내 자신의 질문에)

  • 이것이 원하는 결과를 얻는 가장 효과적인 방법입니까?
    아래 솔루션이 가장 효과적인지는 아직 확신할 수 없지만 적어도 Ubuntu의 명시된 버전에서는 작동한다는 것을 확인할 수 있습니다.
  • 2단계와 3단계의 명령을 어떻게 자동화할 수 있나요?
  • 4단계에서 수동으로 로그인할 때 어떻게 2단계와 3단계의 명령이 활성화되지 않습니까?

    1단계
    위의 1단계에서 자동으로 로그인되는 사용자의 사용자 디렉터리(/home/ubuntu/.profile)에 있는 .profile 파일 맨 아래에 다음을 넣었습니다.

    pgrep processname || /home/ubuntu/processscript.sh
    

    사용자가 자동으로 로그인되면 이 명령은 .profile에 있으므로 자동으로 실행됩니다. 명령의 첫 번째 부분("||" 앞)은 'processname'이 이미 실행 중인지 확인합니다. 그렇지 않은 경우 명령의 두 번째 부분("||" 뒤), 즉 "processscript.sh"를 실행합니다. 'processname'이 이미 실행 중이면

    실행하려는 프로세스가 동시에 여러 인스턴스를 실행할 수 없으므로 이 확인이 필요합니다. 나중에 수동으로 로그인합니다.

    2단계
    다음 내용으로 "processscript.sh"라는 셸 스크립트 파일을 만듭니다.

    #!/bin/bash
    screen -d -m -S screenname &&
    screen -S screenname -p 0 -X stuff "/home/ubuntu/command.sh^M"
    

    "processscript.sh"가 /home/ubuntu 디렉터리에 있고 다음 명령으로 실행 가능한지 확인하세요.

    chmod 744 processscript.sh
    

    위의 셸 스크립트는 "screenname"이라는 이름의 화면 인스턴스를 생성하고, 성공적으로 완료되면 해당 화면 인스턴스의 명령줄에 캐리지 리턴이 포함된 "command.sh" 명령을 채웁니다. 끝은 그렇습니다).

    3단계
    이전 단계에서 화면 명령줄에 속성이 포함된 명령을 입력할 때 몇 가지 문제에 직면했습니다(일부 문자 이스케이프가 필요했던 것 같습니다). 이 문제를 간단하게 해결하기 위해 속성이 포함된 전체 명령을 쉘 스크립트에 추가하고 대신 사용했습니다. 따라서 "command.sh"라는 또 다른 쉘 스크립트(위와 같이)를 작성하고 거기에 전체 명령을 추가하십시오.

관련 정보