Background-Process

如何為 systemd-nspawn 容器設置後台?

  • December 14, 2015

systemd-nspawn用來執行一些容器。我可以讓它們在後台使用systemctl start systemd-nspawn@foo. 但是,有時我會從systemd-nspawn -bD foo. 我找不到任何方法將其發送到後台。如圖所示,關閉終端只會殺死容器machinectl list。我可以這樣做嗎?如果可以,怎麼做?

我了解容器不僅僅是一個程序,但從這個意義上說,預期效果與後台程序相同 - 我希望容器執行,但我原來的 shell 還給了我。

好的,所以,對於它的價值,以下對我來說是成功的:

sudo systemd-nspawn -bxD/

幾乎與您的相同,只是我沒有給出*machine*名稱,並且我得到了容器根目錄的-x臨時 btrfs 快照。/

這在我的終端 pty 上打開了容器getty,我登錄了login所有內容。

我承認我有點難過一段時間,但是在systemctl容器中稍微戳了一下 w/ zsh<tab> 完成後,我想出了*(從容器內執行)*:

systemctl stop console-getty.service

==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or other units.
Authenticating as: mikeserv
Password:
==== AUTHENTICATION COMPLETE ===

這讓機器放棄了它的終端控制權。唯一的事情是,我開始使用sudo- 它也獲得了自己的終端控制層來首先進行身份驗證。這給我留下了一個空白的終端,並且沒有kill -CONT "$(pgrep ksh)"什麼對我有任何好處。所以我又被難住了一兩分鐘,但是*(在另一個終端)* ……

sudo fuser -v /dev/pts/*

                    USER        PID ACCESS COMMAND
/dev/pts/0:          mikeserv   8347 F.... zsh
                    root      18003 F.... sudo
/dev/pts/13:         mikeserv   9553 F.... zsh
                    mikeserv  16838 F.... ksh
                    root      17657 F.... sudo
                    root      17658 F.... systemd-nspawn
/dev/pts/14:         root      17675 F.... systemd

給了我上面的清單,所以我想——到底是什麼?

sudo kill -STOP 17657

而且——你瞧——我又ksh回到了原來的航站樓。總結一下,我需要驗證我仍然可以訪問*machine*,當然,否則它將毫無用處:

machinectl -l

MACHINE                    CLASS     SERVICE
localhost-35ceaa76b1306897 container nspawn

行…

sudo machinectl login localhost-35ceaa76b1306897

Connected to machine localhost-35ceaa76b1306897. 
Press ^] three times within 1s to exit session.

Arch Linux 4.0.7-2-ARCH (pts/0)

localhost-35ceaa76b1306897 login:

getty在另一個終端上得到了另一個!

引用自:https://unix.stackexchange.com/questions/211225