시스템 시작 시 화면 세션 설정

시스템 시작 시 화면 세션 설정

나는 Raspberry Pi를 가지고 있고 거기에서 몇 가지 서비스를 실행하고 있습니다. SSH를 통해 머신에 접속하여 이러한 서비스를 모니터링할 수 있어야 합니다. 현재 내가 하는 일은 로그인하고 실행 screen한 다음 세 개의 창을 만들고 각 창에서 관련 서비스를 실행하는 스크립트를 실행하는 것입니다. 그 중 두 개는 실제로 루트로 실행됩니다. 하나는 네트워크를 모니터링하고 다른 하나는 pi에 연결된 일부 하드웨어를 모니터링합니다. 세 번째는 실제 서비스를 실행하고 내 사용자에서 실행하는 것입니다. (두 번째 것은 기본적으로 하드웨어가 세 번째 것과 통신하기 위한 프록시입니다.)

어쨌든 이것은 어떤 이유로(정전과 같은) 파이가 재부팅되는 경우를 제외하고는 잘 작동합니다. 이 모든 것을 재설정해야 하는데 지루합니다.

시스템이 screen내 사용자 또는 자동 시작에서 실행되도록 하고 세 개의 창, 루트로 실행되는 프로세스 두 개, 내 사용자에서 실행되는 프로세스 하나를 생성하여 로그인할 때 해당 화면 세션에 연결하고 모든 콘텐츠를 실시간으로 실행할 수 있도록 하려고 합니다.

어떻게 해야 하나요?

답변1

@DavidDai가 자신의 의견에서 언급했듯이 시스템 서비스로 실행하는 것이 더 좋습니다(예: 시스템 서비스 파일 또는 sysvinit 시작 스크립트를 생성하여). 그러나 이것은 말처럼 쉽지 않습니다.

화면을 계속 사용할 수 있습니다. 화면에 대한 프로필을 생성하고 사용하기만 하면 됩니다 screen -c /path/to/screen/config(기본 ~/.screenrc프로필 재정의).

screen -t monitor1   0 sudo /path/to/monitor1.sh args 
screen -t monitor2   1 sudo /path/to/monitor2.sh args 
screen -t server     2 /path/to/service/script.sh

특정 활성 창으로 시작하려면 다음과 같은 줄을 추가하면 됩니다.

select 1

man screen자세히보다.

또한 sudo사용자가 루트 monitor1.shmonitor2.sh.

rpi가 다시 시작될 때 자동으로 시작되지 않습니다. screen수동으로 로그인하고 시작 해야 합니다 . uid에서 자동으로 시작하려면 crontab 항목에서 실행할 수 있습니다 @reboot( man 5 crontab자세한 내용은 참고자료 참조).

이 화면 세션에 사용자로 연결할 수 있습니다.


또는 루트로 별도의 화면( screen -d -m -c /path/to/config/etc/rc.local또는 cron위에서 설명한 대로)을 실행한 다음 sudo처음 두 창을 제거하고 마지막 창에 추가할 수 있습니다.

screen -t monitor1   0 /path/to/monitor1.sh args 
screen -t monitor2   1 /path/to/monitor2.sh args 
screen -t server     2 sudo -u username /path/to/service/script.sh

rpi가 다시 시작될 때마다 자동으로 시작됩니다. 이 screen 세션에 연결하려면 루트여야 합니다.


마지막으로 모니터링 스크립트를 루트로 실행할 필요가 없으면 권한이 낮은 사용자로 실행해야 합니다. 새 사용자를 생성하고 모니터링해야 하는 모든 항목에 대한 읽기 액세스 권한이 있는 그룹에 추가할 수도 있습니다.

답변2

이 스크립트는 재부팅 시 화면을 수동으로 생성한 것처럼 시작합니다.

#!/bin/bash -il

# To install:
#   - put this file somewhere in your home directory like ~/start-screens
#   - chmod a+x ~/start-screens
#   - run "crontab -e" and add this line:
#     @reboot /bin/bash -li ~/start-screens

start() { screen -s "/bin/bash" -dmS "$1"; screen -S "$1" -X stuff "$2\n$3\n"; }

# Now define your screens to start here:
start service1 "cd dir1" "node index.js"
start service2 "cd dir2" "node index.js"

이를 홈 디렉토리에 넣고 crontab -e에 추가하는 방법에 대한 지침을 따르십시오.

자세한 내용은https://unix.stackexchange.com/a/766301/598166

관련 정보