📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 110行目: | 110行目: | ||
#include <string> | #include <string> | ||
#include <sdbus-c++/sdbus-c++.h> | #include <sdbus-c++/sdbus-c++.h> | ||
// Systemdサービスはシグナルを送信しないため、今回は使用しない | |||
// #include <atomic> | // #include <atomic> | ||
// #include <chrono> | |||
// #include <thread> | |||
// std::atomic<bool> | // std::atomic<bool> g_keep_running(false); | ||
// UnitStateChangedシグナルハンドラ | // UnitStateChangedシグナルハンドラ | ||
// | // ただし、Systemdサービスはシグナルを送信しないため、今回は定義しない | ||
// void onUnitStateChanged(sdbus::Signal signal) | // void onUnitStateChanged(sdbus::Signal signal) | ||
// { | // { | ||
| 123行目: | 127行目: | ||
// if (unitName == "smb.service" && (newState == "active" || newState == "failed")) { | // if (unitName == "smb.service" && (newState == "active" || newState == "failed")) { | ||
// | // g_keep_running.store(true); | ||
// } | // } | ||
// } | // } | ||
| 198行目: | 202行目: | ||
auto method = systemdProxy->createMethodCall(interfaceName, methodName); | auto method = systemdProxy->createMethodCall(interfaceName, methodName); | ||
// Systemdサービスはシグナルを送信しないため、今回は定義しない | |||
//systemdProxy->uponSignal("JobRemoved") | |||
// .onInterface("org.freedesktop.systemd1.Manager") | |||
// .call(&onUnitStateChanged); | |||
// D-Busサービスを実行する | |||
// "smb.service"は開始するSystemdサービス名 | // "smb.service"は開始するSystemdサービス名 | ||
// "replace"はSystemdサービスの起動モード | // "replace"はSystemdサービスの起動モード | ||
| 203行目: | 213行目: | ||
auto reply = systemdProxy->callMethod(method); | auto reply = systemdProxy->callMethod(method); | ||
// または、以下に示す方法でもD-Busサービスを実行することができる | |||
//systemdProxy->callMethod("StartUnit") | |||
// .onInterface("org.freedesktop.systemd1.Manager") | |||
// .withArguments("smb.service", "replace"); | |||
// Systmedサービスでsmb.service (D-Busサービス) を開始する場合は、ジョブ番号の値が返る | |||
sdbus::ObjectPath jobPath; | sdbus::ObjectPath jobPath; | ||
reply >> jobPath; | reply >> jobPath; | ||
std::cout << "StartUnit job path: " << jobPath << std::endl; | std::cout << "StartUnit job path: " << jobPath << std::endl; | ||
// イベントループを開始 | |||
// Systemdサービスはシグナルを送信しないため、今回は使用しない | |||
//while (g_keep_running) { | |||
// connection->processPendingEvent(); | |||
// std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 100[mS]のスリープ | |||
// // これにより、CPUの過剰な使用を避けつつ適度な応答性を維持 | |||
//} | |||
// smb.service (D-Busサービス) が正常に開始されたかどうかを確認する | |||
std::string serviceName = "smb.service"; | std::string serviceName = "smb.service"; | ||
if (checkServiceStatus(*systemdProxy, interfaceName, serviceName)) { | if (checkServiceStatus(*systemdProxy, interfaceName, serviceName)) { | ||