systemdでプロセスをサービスにする方法は?

systemdでプロセスをサービスにする方法は?

Linuxでプロセスをサービスに切り替えるコマンドまたは方法は何ですか?サービスは本質的にデーモンプロセスではありませんか?

答え1

ユーザーサービスの例は、これを行う方法を説明する最も簡単な方法です。

mytaskサービスとして実行したいバイナリまたはスクリプトがあります/usr/local/bin/

次の内容でホームディレクトリにsystemd名前が付けられたユニットファイルを作成します。my_example.service~/.config/systemd/user/

[Unit]
Description=[My example task]

[Service]
Type=simple
StandardOutput=journal
ExecStart=/usr/local/bin/mytask

[Install]
WantedBy=default.target

この行は、ExecStart実行するバイナリまたはスクリプトのパスを指定する場所なので、最も関連性があります。

起動時にサービスが自動的に開始されるようにするには、次の手順を実行します。

systemctl --user enable my_example.service

再起動せずにすぐにサービスを開始するには、次の手順を実行します。

systemctl --user start my_example.service

サービスを停止するには、次を実行します。

systemctl --user stop my_example.service

サービスの状態を確認するには、次の手順を実行します。

systemctl --user status my_example.service

答え2

用語ではsystemd提供する一種の単位ファイルはもちろん、サービス、ソケット、デバイス、マウント、自動マウント、交換、ターゲット、パス、タイマー、スライス、および範囲も含まれます。はい、基本的にシステムまたはユーザーデーモンを実行する方法です。自分で書くこともできます。上記のリンクから公式文書を読んでください。インターネットには多くのチュートリアルがあります。

答え3

Linuxでは、プロセスをサービスにするいくつかの方法があります。他の人が述べたように、 を使用してsystemdプロセスを実行し、その出力を見ることができますが、言語能力に応じてCの 'double'を使用する古い方法を使用できますfork()(Pythonや他の言語にもこの方法があります)。 )。

fork()C言語を使用すると、子プロセスが生成されます。親プロセスは実際に子プロセスへのハンドルを保持しますが、完了するまで待たないことがあります。親プロセスが完了すると、子プロセスは事実上孤児プロセスになります。fork()また、ingはinit(プロセス1)を意味します。使用新しいプロセス。

fork()とにかく、これらすべてがデーモンを生成するのにどのように機能しますか?さて、親プロセスが終了しても、子プロセスは引き続き実行されます。つまり、子プロセスは、それを実行したシェルに制御権を返すことを意味します。以下は基本的な例ですfork()

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

void forkexample()
{
  int ret = fork();
  if (ret == 0) {
    fork();
    /*
     * zomg i could run in here forever
     * as a daemon.
     * listen for input, monitor logfiles, whatever.
    */
    printf("I'm the child!\n");
    int x = 0;
    while (x < 10) {
      printf("Still running...\n");
      sleep(1);
      x++;
    }
  }
  else {
    printf("Child process spawned; pid %i\n", ret);
    printf("I'm a parent...\n");
  }
}
int main()
{
  forkexample();
  printf(" and I'm exiting.\n");
  return 0;
}

実行結果は次のとおりです。 織る

とにかく続けてください。サブプロセスはプログラムのように永久に実行することができます。これは実際にラップトップのファン速度を制御する最初の実際のプログラムを書いた方法です。

関連情報