Editor php Xiaoxin akan memperkenalkan kepada anda cara menetapkan DBus/Systemd sebagai kebergantungan unit Systemd. DBus dan Systemd ialah dua alatan yang biasa digunakan dalam sistem pengendalian Linux DBus digunakan untuk komunikasi antara proses, manakala Systemd bertanggungjawab untuk pemulaan sistem dan pengurusan proses. Menggabungkan DBus dan Systemd boleh mencapai pengurusan sistem dan penjadualan sumber yang lebih cekap. Artikel ini akan menerangkan secara terperinci cara mengkonfigurasi DBus sebagai kebergantungan dalam unit Systemd untuk membantu anda memahami dan menggunakan penggunaan kedua-dua alatan ini dengan lebih baik.
Saya mempunyai program kecil yang ditulis dalam go
yang menggunakan perpustakaan go-systemd untuk berinteraksi dengan systemd melalui dbus.
Program itu sendiri didaftarkan sebagai unit systemd dan harus dimulakan semasa but. Apabila program berjalan, status unit sistemd bagi berbilang unit akan disoal dengan kerap.
Sekarang apabila saya memulakan program secara manual semuanya baik-baik saja. Walau bagaimanapun, apabila systemd bermula selepas but semula, ia akan "hang", bermakna ia tidak akan dapat menanyakan status unit systemd melalui dbus. Saya akan menerima mesej berikut daripada perpustakaan go-systemd
:
process org.freedesktop.systemd1 exited with status 1
Sekarang apabila saya memulakan semula program, ia akan serta-merta dapat menanyakan unit sistem tanpa ralat. Ini membawa saya untuk menganggap bahawa program saya mempunyai kebergantungan yang rosak/salah konfigurasi dan oleh itu keadaan perlumbaan semasa permulaan, menghalang program daripada berkomunikasi dengan systemd melalui dbus.
Sekarang saya telah meletakkan ini bersama beberapa kombinasi lain, tetapi ia tidak membantu:
Requires=dbus.service After=dbus.service Wants=org.freedesktop.systemd1
Bagaimanakah saya perlu mengkonfigurasi unit systemd saya sendiri (program go) supaya ia boleh berkomunikasi dengan systemd melalui dbus sejurus selepas but semula? Apakah kebergantungan yang perlu saya konfigurasikan?
Nampaknya program anda cuba menyambung ke bas Sesi DBus secara lalai kerana anda berkata ia berfungsi dengan baik apabila anda menjalankannya secara manual. Apabila aplikasi dilancarkan daripada Systemd, ia akan berjalan sebagai root secara lalai dan tidak mempunyai bas sesi untuk disambungkan, jadi ia akan gagal.
Apabila pengguna log masuk pada terminal grafik, bas sesi biasanya dimulakan berdasarkan setiap log masuk. Ia tidak akan bermula secara lalai apabila log masuk dari terminal.
Jika ini berlaku, saya boleh melihat anda mempunyai dua pilihan pada masa ini:
dbus-launch
untuk mencipta bas baharu yang boleh disambungkan oleh aplikasi anda. Atas ialah kandungan terperinci Bagaimana untuk menetapkan dbus/systemd sebagai kebergantungan dalam unit systemd. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!