📢 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> g_shouldExit(false);
  // std::atomic<bool> g_keep_running(false);
   
   
  // UnitStateChangedシグナルハンドラ
  // UnitStateChangedシグナルハンドラ
  // ただし、Systemdサービスはシグナルを送信しないため、今回は設定しない
  // ただし、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_shouldExit.store(true);
  //        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)) {