별도의 화면으로 구성

별도의 화면으로 구성

screen독립 실행형 명령을 사용하여 서비스를 시작하고 싶습니다 . 그 배경은 직렬 인터페이스를 읽고 화면에 다시 연결해야 하며, 오류가 발생하면 상호 작용하거나 직렬 인터페이스를 통해 명령을 보낼 수 있기를 원합니다.

현재 나는

시스템 서비스 파일

[Unit]
Description=read serial interface

[Service]
User=someUser
Group=someUser
Type=forking
Restart=on-failure
RestartSec=3
WorkingDirectory=/home/someUser/dev
ExecStart=/usr/bin/screen -DmS serial-magic /home/someUser/dev/run-serial-magic.sh

[Install]
WantedBy=multi-user.target

/home/someUser/dev/run-serial-magic.sh 아래의 스크립트

#!/bin/bash

pio device monitor -b 115200 -p /dev/ttyUSB0 | tee test.log

난 이미 시도했어

  • 모바일 스크립트 screen내부 .
  • 대신 Type=simple화면 옵션을 사용하세요-d-D

명령줄에서 수동으로 호출하면 스크립트가 제대로 작동합니다. 화면으로 돌아가서 다시 분리할 수 있습니다. 하지만 내가 봉사를 시작했을 때 sudo journalctl -f -u someServoce.service그것은 나에게

Okt 23 18:13:28 someHost systemd[1]: Starting read serial interface...

하지만 screen -list말야

No Sockets found in /run/screen/S-someUser.

답변1

이 경우 화면이 실제로 실행되고 있음을 확인한 경우 서비스 파일의 "someUser"가 실제로 screen -list오류의 someUser와 다르다고 가정합니다. 이 경우 화면에서 다중 사용자 지원을 활성화해야 합니다.

서비스처럼 사용할 계획이므로

    echo "multiuser on" >> /home/<service user>/.screenrc
    echo "acladd <user who needs access to screen>" >> /home/<service user>/.screenrc

그러면 서비스 사용자 화면의 기본값으로 추가됩니다. 이 사용자의 서비스만 사용한다면 더욱 권장됩니다화면에 대한 별도의 프로필 만들기그리고 그것을 사용하여 전화하십시오

    /usr/bin/screen -c /path/to/config.conf -DmS serial-magic /home/someUser/dev/run-serial-magic.sh
    

서비스 파일의 "ExecStart="

그런 다음 다음을 사용하여 화면에 액세스할 수 있습니다.screen -x <service user>/serial-magic

테스트 서버 RHEL 7에서 이를 확인했습니다.

관련 정보