クエリを処理できるサービスをLinuxで作成するには?

クエリを処理できるサービスをLinuxで作成するには?

私はLinuxサービスを作成し、それと通信できるようにしたいです。データを追加してインポートできるデータベースのようなものです。サービスをサーバーにせずにサービスと通信する方法はありますか?私の言葉は、データを送受信するためにhttp方法を使用しないことを意味します。https私が望むのは、URL番号を使用せずにサービスに接続する方法ですport

答え1

あなたが探している答えは、次のものを使用することですシステムソケット

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

これでソケットを設定してサービスを実行できます。私はこれのためにncorを使いますnetcat

$ nc 127.0.0.1 11111

私は単に標準入力を標準出力に渡すためにExecStart使用することにしました。cat -を実行すると、ncstdinに入力したすべての内容がstdoutに再エコーされることを確認できます。実行したいより興味深いアプリケーションがあるかもしれません。

他の素晴らしい点:

  • cat開いているソケットがない場合(ソケットは受信中ですがサービスは停止します)、実行されません。
  • 接続を確立するとサービスが開始されます。
  • 別の接続が行われると、サービスの別のインスタンスが開始されます。
  • 接続を閉じるとサービスが停止します。

答え2

何かが接続を受信するたびにサーバーがあります。 HTTP/S は多くのプロトコルの 1 つにすぎません。独自のプロトコルを介してリモートデータベースに接続することもできます。より複雑なソリューションを探している場合は、SSHトンネリング - 順方向と逆方向をお読みください。systemd決して解決策の必須要素ではありません。

答え3

ローカルコンピュータからのみアクセスして簡単なスクリプトを作成したい場合は、fifoを使用してください。ネットワーク上の他のシステムがアクセスできるようにするには、netcat(nc)を確認してください。

Pythonの専門家にはFlaskがあり、PerlプログラマーにはDancer2があります。

socketCでは、bindおよびを使用できますlisten

@tomが言ったように、systemdあなたの要件とは関係ありません。

編集する:

あなたの追加

私が望むのは、URLやポート番号ではなくサービスにアクセスする方法です。

あなたが探しているものが何であるかは完全に不明です。

コンピュータと通信するには、アドレスを知る必要があります。そうでなければ、誰と通信しているのかは決してわかりません。データベースとクライアントも合意された契約を結ぶ必要があります。さもなければ、彼らはお互いを理解していないでしょう。これを行うにはURIが必要です。

ポート番号(TCPやUDPなど)を使用したくない場合は、他のプロトコル(https://www.iana.org/locationments/protocol-numbers/protocol-numbers.xhtml)、それがあなたに効果がある場合。それなら253か254が適当だと思う。しかし、これをうまくいくふりをすることを受け入れないでください。まだこれを作動させる能力がないようです。

提案がある場合は、まず同じシステムでfifoを試してください。うまくいけば、netcatで調べてみてください。

関連情報