私は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
これでソケットを設定してサービスを実行できます。私はこれのためにnc
orを使いますnetcat
:
$ nc 127.0.0.1 11111
私は単に標準入力を標準出力に渡すためにExecStart
使用することにしました。cat -
を実行すると、nc
stdinに入力したすべての内容がstdoutに再エコーされることを確認できます。実行したいより興味深いアプリケーションがあるかもしれません。
他の素晴らしい点:
cat
開いているソケットがない場合(ソケットは受信中ですがサービスは停止します)、実行されません。- 接続を確立するとサービスが開始されます。
- 別の接続が行われると、サービスの別のインスタンスが開始されます。
- 接続を閉じるとサービスが停止します。