Saya pikir saya telah menemukan solusi yang lebih baik daripada yang saat ini disajikan di sini. Sebagian karena sejauh yang saya tahu cgmanager sudah mati, sebagian karena solusi saya tidak terasa seperti solusi yang buruk, tetapi sebagian besar karena diskusi ini masih muncul ketika mencari solusi untuk masalah tersebut. Sebenarnya cukup sederhana: gunakan mode pengguna systemd .
Memang jika Anda tidak menggunakan systemd solusi ini tidak akan membantu. Dalam hal ini saya akan menyarankan Anda untuk mencari tahu apakah sistem init Anda memiliki beberapa cara untuk memungkinkan pengguna yang tidak terdaftar untuk menjalankan layanan saat boot dan menggunakannya sebagai titik awal.
Menggunakan mode pengguna systemd untuk melakukan autostart wadah lxc yang tidak terjangkau
Saya berasumsi Anda memiliki kontainer lxc yang tidak bekerja dan berfungsi dengan baik dan berfungsi lxc-autostart
sebagai pengguna kontainer. Jika demikian, lakukan hal berikut:
- Buat file
~/.config/systemd/user/lxc-autostart.service
di rumah pengguna apa pun yang memiliki wadah lxc:
[Unit]
Description="Lxc-autostart for lxc user"
[Service]
Type=oneshot
ExecStart=/usr/bin/lxc-autostart
ExecStop=/usr/bin/lxc-autostart -s
RemainAfterExit=1
[Install]
WantedBy=default.target
- Kemudian saat pengguna menjalankan:
systemctl --user enable lxc-autostart
(Catatan, --user
opsi memberi tahu systemctl Anda menggunakannya dalam mode pengguna. Semua hal yang biasanya saya lakukan dengan systemctl, mulai, berhenti, statuc, aktifkan, dll, bekerja dengan --user.)
- Kemudian jalankan yang berikut ini, di mana
$user
nama pengguna yang memiliki kontainer lxc:
sudo loginctl enable-linger $user
Ini diperlukan bagi systemd untuk memulai instance pengguna systemd $user
ketika boot. Kalau tidak, itu hanya akan mulai satu saat $user
login.
Untuk informasi lebih lanjut, saya akan merekomendasikan halaman archlinux wiki systemd / timer dan halaman manual systemd .
Mengakses instance systemd pengguna sebagai root
Anda benar-benar dapat memulai / menghentikan / apa pun layanan systemd pengguna sebagai root, namun ini mengharuskan Anda untuk mengatur XDG_RUNTIME_DIR
variabel lingkungan. Asumsikan $user
adalah pengguna yang instansinya ingin Anda akses dan $uid
itu adalah uid, maka ini adalah cara Anda memulai lxc-autostart.service yang ditentukan di atas:
sudo -u $user XDG_RUNTIME_DIR=/run/user/$uid systemctl --user start lxc-autostart
Anda bahkan dapat menggunakan systemd-run
untuk menjalankan perintah sewenang-wenang sebagai pengguna dengan cara yang tidak merusak lxc. Saya menggunakan perintah berikut untuk menghentikan / memulai wadah saya sebelum / sesudah pencadangan, di mana $name
nama wadah lxc yang didukung:
sudo -u $user XDG_RUNTIME_DIR=/run/user/$uid systemd-run --user --wait lxc-stop -n $name
sudo -u $user XDG_RUNTIME_DIR=/run/user/$uid systemd-run --user --scope lxc-start -n $name
(Perhatikan bahwa tanpa --wait
systemd-run tidak akan memblokir sampai wadah dihentikan.)