Background-Process
如何為 systemd-nspawn 容器設置後台?
我
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
在另一個終端上得到了另一個!