
나는 리눅스 서비스를 만들고 그것과 통신할 수 있기를 원합니다. 데이터를 추가하고 가져올 수 있는 데이터베이스와 같은 것입니다. 서비스를 서버로 만들지 않고 내 서비스와 통신할 수 있는 방법이 있나요? 내 말은 데이터를 보내고 얻는 방법을 http
사용 하지 않는다는 뜻입니다 . https
제가 원하는 것은 a URL
와 port
번호를 사용하지 않고 서비스에 연결하는 방법입니다.
답변1
당신이 찾고있는 대답은 다음을 사용하는 것입니다systemd.socket
stdin을 읽고 stdout에 쓰는 프로그램이 있다고 가정해 보겠습니다. 소켓을 통해 액세스할 수 있도록 systemd를 구성할 수 있습니다.
다음은 이를 수행하도록 systemd를 구성하는 방법에 대한 예입니다.
# /etc/systemd/system/simple.socket
[Socket]
Accept=yes
ListenStream=11111
# /etc/systemd/system/[email protected]
[Unit]
Description="Simple service"
After=network.target simple.socket
Requires=simple.socket
[Service]
Type=simple
ExecStart=-cat -
StanardInput=socket
StandardOutput=socket
다음으로 소켓을 시작하십시오:
$ sudo systemctl start simple.socket
이제 소켓을 설정하여 서비스를 실행할 수 있습니다. 나는 이것을 위해 nc
or 를 사용합니다 netcat
:
$ nc 127.0.0.1 11111
나는 단순히 stdin을 stdout으로 전달하는 것을 ExecStart
사용하기로 선택했습니다 . cat -
를 실행하면 nc
stdin에 입력하는 모든 내용이 stdout을 통해 우리에게 다시 반영된다는 것을 알게 될 것입니다. 아마도 실행하고 싶은 것보다 더 흥미로운 응용 프로그램이 있을 것입니다.
몇 가지 다른 멋진 점:
cat
열린 소켓이 없으면 실행되지 않습니다(소켓은 수신 중이지만 서비스는 중지됨).- 연결을 설정하면 서비스가 시작됩니다.
- 다른 연결을 설정하면 서비스의 다른 인스턴스가 시작됩니다.
- 연결을 닫으면 서비스가 중지됩니다.
답변2
무언가가 연결을 수신할 때마다 서버가 있습니다. HTTP/S는 수많은 프로토콜 중 하나일 뿐입니다. 자체 프로토콜을 사용하여 원격 데이터베이스에 연결할 수도 있습니다. 더 복잡한 솔루션을 찾고 있다면 SSH 터널링 - 정방향 및 역방향에 대해 읽어보세요. 그리고 systemd
이는 솔루션의 필수 요소가 아닙니다.
답변3
로컬 컴퓨터에서만 이에 액세스하고 간단한 스크립트를 만들고 싶다면 fifo를 사용하세요. 네트워크의 다른 시스템에도 액세스 권한을 부여하려면 netcat( nc
)을 살펴보십시오.
Python 전문가에게는 Flask가 있고 Perl 프로그래머에게는 Dancer2가 있습니다.
socket
C에서는 , bind
및 를 사용합니다 listen
.
그리고 @tom이 언급했듯이: systemd
귀하가 요청하는 것과는 아무 관련이 없습니다.
편집하다:
당신의 추가
제가 원하는 것은 URL과 포트번호를 제외하고 서비스에 접속하는 방법입니다.
당신이 찾고있는 것이 무엇인지 완전히 불분명하게 만듭니다.
컴퓨터와 통신하려면 주소를 알아야 합니다. 그렇지 않으면 누구와 의사소통을 하고 있는지 전혀 알 수 없습니다. 데이터베이스와 클라이언트도 합의된 프로토콜이 있어야 합니다. 그렇지 않으면 그들은 서로를 이해하지 못할 것입니다. 그리고 이를 통해 필연적으로 URI를 갖게 됩니다.
TCP나 UDP처럼 포트 번호를 사용하지 않으려면 다른 프로토콜(https://www.iana.org/locationments/protocol-numbers/protocol-numbers.xhtml) 그것이 당신에게 적합하다면. 그러면 253이나 254가 적합할 것입니다. 그러나 이것을 애용하는 것으로 받아들이지 마십시오. 당신은 아직 이것을 작동시킬 기술이 없는 것 같습니다.
권장 사항을 적용하려면 먼저 동일한 시스템에서 FIFO를 사용해 보십시오. 작동한다면 netcat에서 조사해 보세요.