如何使用g_bus_own_name提供该服务?

问题描述

我写代码。我用gio编写C编程。它在服务器上启动并打印错误。 stackoverflow需要更多的单词,但无需编写任何内容

static void set_server_dbus ( void ) {
    unsigned int owner_id;
    introspection_data = g_dbus_node_info_new_for_xml (introspection_xml,NULL);

    owner_id = g_bus_own_name ( G_BUS_TYPE_SESSION,"com.xverizex.Trade_bot",G_BUS_NAME_OWNER_FLAGS_NONE,on_bus_acquired,on_name_acquired,on_name_lost,NULL,NULL );
}
...
int main ( int argc,char **argv ) {
    init_buffers ( );
    MysqL = MysqL_init ( NULL );
    if ( MysqL_real_connect ( MysqL,"localhost","gag","binance",0 ) == NULL ) {
        printf ( "не правильные данные для базы данных.\n" );
        return -1;
    }

    set_server_dbus ( );
    subscribe_to_net_device ( );

    if ( power_net == 100 ) {
        connect_to_network ( );
        printf ( "!ok\n" );
    }

    GMainLoop *loop;
    loop = g_main_loop_new ( NULL,FALSE );
    g_main_loop_run ( loop );
    return 0;
}

如果从终端启动,则可以,但是如果通过systemctl启动,则打印错误

server@server:~$ systemctl status Trade_bot.service 
● Trade_bot.service - Trade bot
     Loaded: loaded (/lib/systemd/system/Trade_bot.service; enabled; vendor preset: enabled)
     Active: Failed (Result: exit-code) since Mon 2020-10-12 23:22:32 UTC; 4min 49s ago
    Process: 1511 ExecStart=/usr/local/bin/Trade_bot (code=exited,status=1/FAILURE)
   Main PID: 1511 (code=exited,status=1/FAILURE)

Oct 12 23:22:32 server systemd[1]: Started Trade bot.
Oct 12 23:22:32 server Trade_bot[1511]: SUCCEED: Подключение к сетевому интерфейсу успешно.
Oct 12 23:22:32 server Trade_bot[1511]: SUCCEED: Получение сетевого интерфейса успешно.
Oct 12 23:22:32 server Trade_bot[1511]: SUCCEED: Успешное подключение к NetworkManager.Device.
Oct 12 23:22:32 server Trade_bot[1511]: !ok
Oct 12 23:22:32 server systemd[1]: Trade_bot.service: Main process exited,code=exited,status=1/FAILURE
Oct 12 23:22:32 server systemd[1]: Trade_bot.service: Failed with result 'exit-code'.

这是service_file。

[Unit]
Description=Trade bot
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/local/bin/Trade_bot

[Install]
WantedBy=multi-user.target

它叫做

static void
on_name_lost (GDBusConnection *connection,const gchar     *name,gpointer         user_data)
{
  exit (1);
}

但是为什么呢? 如您所见,这是introspection_xml。这里的接口具有完整路径。

static const gchar introspection_xml[] =
  "<node>"
  "  <interface name='com.xverizex.Trade_bot.status'>"
  "    <method name='stop_Trading'>"
  "      <arg type='u' name='status' direction='out'/>"
  "    </method>"
  "    <method name='start_Trading'>"
  "      <arg type='u' name='status' direction='out'/>"
  "    </method>"
  "  <property type='u' name='is_connected' access='read'/>"
  "  <signal name='connection_changed'>"
  "    <arg type='u' name='status'/>"
  "  </signal>"
  "  </interface>"
  "</node>";

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)