Цель
Я хотел бы написать приложения на C / C ++ и предоставить им API для непосредственного взаимодействия с systemd
управляемыми сервисами.По сути, я бы хотел, чтобы мои приложения могли выполнять эквивалент systemctl start service_name@unit_number.service
без использования вызовов system()
, popen()
или exec()
( жесткое требование ).
Вопрос
Существует ли простой C / C ++ API для связи с systemd
, предполагая, что systemd
версия 219 (то есть CentOS v7.4, такжежесткое требование )?
Работа на данный момент
- В Интернете я нашел примеры управления
systemd
управляемыми сервисами в C / C ++ и нашел странное обсуждение по теме , но не нашел хороших примеров. - Я всегда мог перепроектировать
systemctl
версию 219 из источника , но затем я потенциально столкнулся с лицензией GPL. - Так как я застрялс CentOS v7.4, что означает, что я не могу получить версию 221 или более позднюю версию systemd, я не могу использовать более новый API-интерфейс «SD Bus». Никто не позволил бы обновить
libsystemd
вручную только дляпреимущества для конкретного приложения, и я, очевидно, не первый человек, который поднимет эту проблему. - Я не решаюсь использовать низкоуровневый C API для DBUS ,поскольку сами сопровождающие заявляют: « Если вы используете этот низкоуровневый API напрямую, вы регистрируетесь с некоторыми трудностями. ».
Жесткие требования
systemd
v219. - CentOS v7.4
- C / C ++.
- Нет
system()
/ popen()
/ exec()
вызовык утилите systemctl
CLI. - Лицензия на нераспространение (т. е. LGPLv2 в порядке, хотя предпочтительнее BSD / MIT).
Вопрос (Redux)
Есть ли простойКакой API, который я мог бы использовать в CentOS v7.4 (даже если мне придется самому предоставлять разделяемую библиотеку), который можно использовать для простого и надежного взаимодействия с systemd
напрямую через код C / C ++? Если существующий libdbus-1.so
API сложен, но все еще надежен, и я могу создать надежную / стабильную библиотеку оберток вокруг него, я открыт для изучения этого варианта. Кроме того, если возможно создать и вручную построить иразверните компоненты SD-BUS независимо от systemd
и используйте их без необходимости изменять / обновлять библиотеку / демон systemd
, уже находящиеся в системе, я потенциально мог бы также пойти по этому пути.
Редактирование& Комментарии
- Я был бы открыт для использования зрелой библиотеки C ++, если только она не требует полного выпуска всего исходного кода.
Спасибо.