나는 현재 여기에 제시된 것보다 더 나은 해결책을 찾았다 고 생각합니다. 내가 cgmanager가 죽었다고 말할 수있는 한 부분적으로 내 솔루션이 해킹 된 해결책처럼 느껴지지 않기 때문에 대부분이 문제에 대한 해결책을 찾을 때이 토론이 여전히 나타나기 때문입니다. 실제로는 매우 간단합니다 : systemd user mode 사용하십시오 .
systemd를 사용하지 않으면이 솔루션이 도움이되지 않습니다. 이 경우 init 시스템에 권한이없는 사용자가 부팅시 서비스를 실행하고이를 시작점으로 사용할 수있는 방법이 있는지 알아볼 것을 권합니다.
권한이없는 lxc 컨테이너를 자동 시작하기 위해 시스템 사용자 모드 사용
권한이없는 lxc 컨테이너가 올바르게 작동하고 lxc-autostart
컨테이너 사용자가 작업 하면서 실행 되는 것으로 가정 합니다. 그렇다면 다음을 수행하십시오.
~/.config/systemd/user/lxc-autostart.service
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
- 그런 다음 해당 사용자가 실행하면
systemctl --user enable lxc-autostart
(이 --user
옵션은 systemctl에게 사용자 모드에서 사용하고 있음을 알려줍니다. 일반적으로 systemctl, start, stop, statuc, enable 등으로하는 모든 작업은 --user와 함께 작동합니다.)
- 그런 다음
$user
lxc 컨테이너가있는 사용자 이름 인 다음을 실행하십시오 .
sudo loginctl enable-linger $user
$user
부팅시 systemd가 시스템 사용자 인스턴스를 시작하는 데 필요합니다 . 그렇지 않으면 $user
로그인 할 때 하나만 시작 됩니다.
자세한 내용은 archlinux wiki systemd / timer 페이지 및 systemd 매뉴얼 페이지를 권장합니다 .
루트로 사용자의 시스템 인스턴스에 액세스
실제로 사용자의 시스템 서비스를 루트로 시작 / 중지 / 할 수 있지만 XDG_RUNTIME_DIR
환경 변수 를 설정해야 합니다. $user
인스턴스에 액세스하려는 사용자이고 $uid
uid라고 가정 하면 위에서 정의한 lxc-autostart.service를 시작하는 방법입니다.
sudo -u $user XDG_RUNTIME_DIR=/run/user/$uid systemctl --user start lxc-autostart
systemd-run
lxc를 손상시키지 않는 방식으로 사용자로서 임의의 명령을 실행 하는 데 사용할 수도 있습니다 . 다음 명령을 사용하여 백업 전 / 후에 컨테이너를 중지 / 시작합니다. 여기서 백업 $name
중인 lxc 컨테이너의 이름은 다음과 같습니다.
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
(주없이 그 --wait
컨테이너가 중지 될 때까지 systemd-실행이 차단되지 않습니다.)