web-dev-qa-db-ja.com

LXCコンテナーはコマンドラインから起動しますが、自動的には起動しません。cronの@rebootまたは/etc/rc.initから起動します。

コンテナはいつでも正常に起動できます。

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が終了する前に、これらすべてのことが起こっているのではないかと強く思います。 cronエントリにsleep 30 ;を追加しても役に立ちませんでした。

私を混乱させているのは、ログstderr、stdout、またはログ出力がまったく得られないことです。

コンテナを自動的に起動させる、または少なくともログ出力を表示するにはどうすればよいですか?


更新:

私は追加しました:

*/5 * * * * /usr/bin/lxc-start -n mycontainer

ルートのcronに移動しますが、それでも起動しません。 bashプロンプトからの同じ(Sudo'd)コマンドは機能します。ルートの残りのcronエントリは期待どおりに機能しています。

1
fadedbee

起動時にLXCコンテナーを開始するために、lxcシステムサービスは、文書化されているようにlxc-autostartを実行します ここ

自動開始を構成するには、コンテナー構成に次の2行を入れます。

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

@rexkogitansが提供する「公式」ソリューションを使用することを強くお勧めします。

Cronで始まらないプログラムは、多くの場合、異なる環境に悩まされます。実行中のシェルは通常shであり、環境変数はインタラクティブシェルとは異なります。興味がある場合は、cronからsetenvなどのコマンドを実行し、それらの出力をファイルに送信します。

0
ua2b