MochiuWiki : SUSE, EC, PCB
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtの応用 - Systemdのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtの応用 - Systemd
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == サービスとは、PCの起動時に自動的に実行され、バックグラウンドで仕事をするために待機するソフトウェアのことである。<br> <br> 一般的に、サービスはグラフィカルユーザインターフェースを持たず、ユーザの操作無しに動作する。<br> 最もよく知られているサービスは、Web、メール、データベース等のサーバで、Apache、MySQL等がある。<br> <br> また、ハードウェアの検出やUSBメモリの自動統合(マウント)等もサービスによって行われる。<br> <br> サービスには、システム起動時に関連するタスクやハードウェアに関連するタスクを行う"内部サービス"と、<br> その後にユーザがインストールするサービス(通常は全てのサーバサービスを含む)の2種類がある。<br> <br> 技術用語やコンピュータ用語では、サービスは伝統的にデーモンと呼ばれている。<br> そのため、サーバコンポーネントであるsshdやmysqldのように、サービスを表すプログラムの最後の文字として"d"が用いられることが多い。<br> <br> 一方、Systemdは、システムおよびセッションマネージャ(initシステム)であり、<br> コンピュータの起動プロセスからシャットダウンまでの全動作時間にわたって、システム上で動作するすべてのサービスを管理する役割を担っている。<br> <br> プロセスは常に(可能な限り)並行して起動され、起動プロセスを可能な限り短くする。<br> ここで、.serviceで終わる設定ファイルを作成して、Systemdが制御・監視するプロセスに関するコードを保持する場合をSystemd Service Unitファイルと呼ぶ。<br> <br> Systemdには、サービス、タイマ、マウントポイント、ソケット、スワップスペース、デバイス等のユニットが存在する。<br> そのため、Systemdは管理用の設定の全てをファイルから取得する。<br> <br> Systemdの用語では、これらを"ユニット"と呼び、システム全体に適用されるユニットと各ユーザ領域にのみ適用されるユニットがある。<br> <br> ユニットには、サービスを開始するためのサービスユニットや、ある時点でのアクションを(繰り返し)実行するためのタイマユニット等、様々な種類がある。<br> <br> 各タイプのユニットファイルに共通しているのは、iniファイルに似た構造をしていることである。<br> ユニットファイルは、いくつかのセクション(多くの場合、3セクション)で構成されている。<br> <br> Systemdではセクションと呼ばれ、その中に一連のキーと値のペア(Systemdではディレクティブと呼ばれる)が格納されている。<br> <br><br> == Systemdライブラリのインストール == ==== ライセンス ==== Systemdライブラリのライセンスは、LGPL v2.1以降、または、 GPL 2.0である。<br> <br> ==== パッケージ管理システムからインストール ==== # RHEL sudo dnf install systemd-devel # SUSE sudo zypper install systemd-devel <br> ==== ソースコードからインストール ==== [https://github.com/systemd/systemd SystemdのGithub]にアクセスして、ソースコードをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf systemd-<バージョン>.tar.gz cd systemd-<バージョン> <br> Systemdをビルドおよびインストールする。<br> mkdir build && cd build ../configure --prefix=<Systemdのインストールディレクトリ> make -j $(nproc) make install <br><br> == サンプルコード == <code>QProcess</code>クラスやD-Busを使用せずに、Systemdを利用してSSHデーモンを起動する場合は、Systemdのライブラリを使用する必要がある。<br> <br> 以下の例では、Systemdのライブラリを使用してSSHデーモンを起動している。<br> # <code>sd_booted</code>関数を使用して、システムがSystemdで起動されているかどうかを確認する。 #: 0を返す場合は、Systemdで起動されていることを示す。 #: 0以外を返す場合は、Systemdで起動されていないことを示す。 #: <br> # Systemdで起動されている場合は、<code>sd_service_start</code>関数を使用して、sshd.serviceを起動する。 #: 0を返す場合は、サービスの起動に成功したことを示す。 #: 0以外を返す場合は、サービスの起動に失敗したことを示す。 #: エラーメッセージを表示して、プログラムを終了する。 # Systemdで起動されていない場合は、エラーメッセージを表示して、プログラムを終了する。 <br> このサンプルコードを実行するには、libsystemd-devパッケージがインストールされている必要がある。<br> また、適切な権限でプログラムを実行する必要がある。<br> <br> <u>※注意</u><br> <u>この方法は、Systemdが利用可能なシステムでのみ動作する。</u><br> <br> <syntaxhighlight lang="c++"> #include <QCoreApplication> #include <QDebug> #include <systemd/sd-daemon.h> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // Systemdライブラリを使用してSSHデーモンを起動 int ret = sd_booted(); if (ret == 0) { qDebug() << "Running under systemd."; ret = sd_service_start("sshd.service"); if (ret == 0) { qDebug() << "sshd serviceを開始"; } else { qDebug() << QString("sshd serviceの開始に失敗: %1").arg(strerror(-ret)); return -1; } } else { qDebug() << "Not running under systemd."; return -1; } return a.exec(); } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:Qt]]
Qtの応用 - Systemd
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse