ubuntu – 如何使用systemd-nspawn,systemd-run在容器中启动程序作为服务?

如何使用systemd-nspawn在容器内运行监听程序(特别是unoconv作为监听器),以便它可以在后台运行(没有控制台)并被其他进程访问?例如,在完美的世界中,它就像这样容易:

# something like this to start the container and program in background
systemd-nspawn -D <container path> --background <unoconv --listener> 

# something like this to connect to container and execute command
systemd-run --machine <machine name> <unoconv -f pdf file.txt>

到目前为止,我所使用的最远的是使用this guide,它使用machinectl在后台运行容器.但是sudo systemd-run –machine< machine name> ls因错误而失败:

Failed to create bus connection: Permission denied.

我的问题是双重的.一,你能解决这个错误吗?或者两个(最好)你能给我一个更简单的方法来启动和连接容器并运行命令吗?

(我在没有互联网访问权限的安全机器上运行Ubuntu Xenial)

最佳答案
我认为这取决于你想要运行容器的频率和时间.

如果你希望在Ubuntu加载后立即运行,那么每次计算机启动时,我都会建议您尝试启动应用程序设置.您可以添加任何充当终端命令的内容作为启动“应用程序”进程.或者,您可以将脚本放在一起,然后将脚本作为启动过程运行,这将为您提供更好的控制. (请记住,“启动应用程序”列表中的项目按名称字段按字母顺序执行,因此,如果执行顺序很重要,请相应地命名,或者仅命名为create a startup script and make that the only call.)

如果你想在特定的重复时间/日期运行程序,我建议你把一个cron作业放在一起做同样的事情.

如果你想按需运行它……不确定.我对systemd-nspawn不太熟悉; maybe this articlethis article将有所帮助.

对于问题1,我很难过.可能是机器名称中的错字?容器操作系统权限与systemd-run身份验证选项不匹配? You could try sshda docker container如果没有其他工作.

当然,如果您实际输入的内容类似于“–machine< machine name>”,请将其更改为“–machine =< machine name>”可能只是解决它. :P

转载注明原文:ubuntu – 如何使用systemd-nspawn,systemd-run在容器中启动程序作为服务? - 代码日志