나는 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.sh
및 monitor2.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에 추가하는 방법에 대한 지침을 따르십시오.