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에서 이를 확인했습니다.