我总是可以通过以下方式成功启动我的容器:
fadedbee@host:~$ sudo lxc-start -n mycontainer
它曾经自动启动,直到我将本地 ZFS 上的一些目录绑定到它。
我将以下内容添加到/etc/rc.local:
/bin/date >> /var/log/mycontainer.log
/bin/chmod a+r /var/log/mycontainer.log
/usr/bin/lxc-start -o /var/log/mycontainer.log
-l INFO -n mycontainer > /var/log/mycontainer.stdout 2> /var/log/mycontainer.stderr &
/var/log/mycontainer.log 文件已创建,但仅包含日期,不包含其他内容。
我将以下内容添加到 root 的 crontab 中:
@reboot /usr/bin/lxc-start -o /var/log/mycontainer.log -l INFO -n mycontainer
但这也没有产生任何结果。
我强烈怀疑所有这些事情都是在 ZFS 完成之前发生的。添加sleep 30 ;
到 cron 条目没有帮助。
让我困惑的是我根本没有得到日志 stderr、stdout 或日志输出。
如何让我的容器自动启动,或者至少看到日志输出?
更新:
我已经添加:
*/5 * * * * /usr/bin/lxc-start -n mycontainer
到 root 的 cron,但它仍然无法启动。这相同的bash 提示符下的 (sudo'd) 命令有效。 root 的其余 cron 条目按预期工作。
答案1
要在启动时启动 LXC 容器,lxc 系统服务运行 lxc-autostart,如文档所示这里。
要配置自动启动,请在容器配置中输入以下两行:
lxc.start.auto = 1
lxc.start.delay = 30
延迟可以设置为任何所需的值(以秒为单位)。
crontab 中不能有任何内容。只需重新启动系统,lxc 服务就会完成这项工作。
您可能想检查 LXC 自动启动是否在启动时运行。要在 systemd 系统上执行此操作,您可以列出 systemd 服务并进行检查,lxc.service
如下所示:
systemctl -la | grep 'lxc\.service'
你应该得到这样一行:
lxc.service loaded active exited LXC Container Initialization and Autoboot Code
如果您没有看到这样的行,请尝试启用该服务:
sudo systemctl enable lxc
答案2
我强烈鼓励使用@rexkogitans 提供的“官方”解决方案。
不是从 cron 启动的程序通常会遇到不同的环境。执行 shellsh
和环境变量通常与交互式 shell 不同。如果您有兴趣,请运行 cron 等命令set
,env
并将其输出定向到文件。
答案3
编辑:我通过将必要的路径数据添加到 crontab -e 解决了这个问题。我添加了以下行:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
在 crontab 注释之后、作业列表之前。
这个问题(和解决方案)可以通过比较命令行的输出来部分验证:
env
和(临时)cron 作业:
* * * * * env > env_dump.txt
就我而言,路径不相同,并且 cron 路径不足以启动 lxc-start。
我有一个类似的问题。在提升su -
并发出lxc-start -n test
(debian 11)后,我的容器将从命令行正常启动。
我有一个备份脚本,可以停止容器 tar.gz rootfs,然后重新启动它。我通过 cron 从 cron 运行脚本sh /home/dave/backup.sh
。它按预期执行所有步骤,但是重启容器失败当它完成时。我找不到有用的错误消息。如果我从 shell 运行这个确切的命令,它就可以正常工作。不知何故,有关 cron 的某些事情导致了问题。这个问题有解决过吗?