서비스 파일 및 Minicom

서비스 파일 및 Minicom

재부팅 후 스크립트 파일을 실행하고 서비스 후에 시작되는 서비스 스크립트를 만들었습니다 [email protected]. 문제는 내 스크립트 파일이 일부 사용자 입력을 제공해야 하지만 서비스 파일이 직렬 콘솔(MINICOM)에 어떤 출력도 표시하지 않는다는 것입니다.

minicom 창에서 스크립트 파일을 실행하는 서비스 파일의 출력을 얻을 수 있는 방법이 있는지 궁금합니다. 명령을 실행할 때 표시되는 출력을 볼 수 있으므로 서비스 파일이 실행 중입니다.

systemctl status transfer.service

참고용으로 아래 서비스 파일을 첨부했습니다.

[Unit]
Description=My Script Service
[email protected]

[Service]
ExecStart=/home/PARTITION/flag.sh

[Install]
WantedBy=multi-user.target

답변1

보통 [email protected]하나서비스 템플릿. 템플릿에 의해 정의된 실제 서비스는 다음과 같습니다 [email protected]. 즉, 기호 뒤의 부분은 @서비스가 적용될 직렬 포트를 식별합니다.

이것이 없으면 서비스는 의미가 없습니다. 서비스를 시작하려고 하면 오류가 발생할 뿐입니다.

# systemctl start [email protected]
Failed to start [email protected]: Unit name [email protected] is missing the instance name.
See system logs and 'systemctl status [email protected]' for details.

[email protected]이 경우에는 그것이 어떤 용도로 사용될지 모르겠습니다 .

일반적으로 귀하와 같은 시스템 서비스는transfer.service 콘솔에서 입력을 받지 못함.

직렬 포트를 특정 서비스 전용으로 지정하고 직렬 포트를 통해 입력 및 출력을 수행하도록 허용할 수 있지만 이는 직렬 포트가 다른 서비스에서 동시에 사용되지 않는 경우에만 실제로 작동합니다. 특히 그러한 직렬 포트시스템 콘솔로 사용하면 안 됩니다.또는 어떤 것을 통해서든 serial-getty@<port name>.service.

그래서 나는 당신의 설정에 대해 약간 혼란스러워합니다. 귀하의 MINICOM 디스플레이가 현재 login:직렬 포트에 프롬프트를 표시하고 있습니까? 그렇다면 이 일을 계속해야 합니까? 대답이 '예'인 경우 해당 직렬 포트를 사용하여 입력 및 출력을 처리할 수 없습니다. transfer.service서비스에 들어가는 입력과 콘솔 프롬프트에 들어가는 입력을 제어할 수 없기 때문입니다. 입력은 처음 읽은 프로세스로 이동하며 이는 본질적으로 예측할 수 없습니다.

직렬 포트가 현재 사용 중이 아닌 경우(즉, MINICOM 창에서 Enter를 여러 번 눌러도 출력이 표시되지 않는 경우) 다음을 추가하여 서비스를 연결할 수 있습니다.

StandardInput=tty
StandardOutput=tty
TTYPath=/dev/ttyS0    # or whatever is the actual device name for the serial port

[Service]파일 섹션 transfer.service. 이렇게 하면 직렬 포트를 사용할 수 있게 되자마자 스크립트가 시작되고 직렬 포트에 액세스할 수 있는 사람은 누구나 로그인하지 않고도 즉시 스크립트와 상호 작용할 수 있습니다.

로그인 시 스크립트를 대화형으로 실행 하려면 /home/PARTITION/flag.sh다음과 같은 두 가지 표준 방법이 있습니다.

  • 이를 로그인 스크립트(일반적 ~/.bash_profile으로 또는 ~/.profile)에 추가할 수 있습니다.

  • 또는 특정 사용자 계정을 스크립트 실행 전용으로 지정하고 다른 작업은 수행하지 않으려면 스크립트를 다음과 같이 설정할 수 있습니다.해당 사용자의 기본 셸을 사용 sudo chsh -s /home/PARTITION/flag.sh username하면 해당 사용자가 로그인하자마자 스크립트가 시작되고, 종료되면 즉시 로그아웃하고 로그인 프롬프트로 돌아갑니다.

관련 정보