私がやろうとしていることができるかどうかは完全にはわかりません。 vbox 仮想マシンをサービスとして実行し、起動時に有効にしたいと思います。これは私の.serviceスクリプトです。
[Unit]
Description=Virtualbox Headless VM
Wants=network-online.target
After=network-online.target
[Service]
Type=forking
ExecStart=/usr/bin/VBoxHeadless -s vbox_uuid
ExecStop=/usr/bin/VBoxManage controlvm vbox_uuid poweroff
User=myuser
[Install]
WantedBy=muti-user.target
正常に起動しようとすると、cliは中断され、プロセスは分岐しません。誰でもどんな考え/アイデア/提案がありますか?
systemctl status は以下を提供します。
Jun 20 07:17:07 localhost.localdomain systemd[1]: Starting Virtualbox Headless VM...
Jun 20 07:17:09 localhost.localdomain pulseaudio[4143]: [pulseaudio] socket-server.c: bind(): Address already in use
Jun 20 07:17:09 localhost.localdomain pulseaudio[4143]: [pulseaudio] module.c: Failed to load module "module-esound-protocol-unix" (argument: ""): initialization failed.
Jun 20 07:17:09 localhost.localdomain pulseaudio[4143]: [pulseaudio] main.c: Module load failed.
Jun 20 07:17:09 localhost.localdomain pulseaudio[4143]: [pulseaudio] main.c: Failed to initialize daemon.
Jun 20 07:17:09 localhost.localdomain pulseaudio[4140]: [pulseaudio] main.c: Daemon startup failed.
Jun 20 07:18:37 localhost.localdomain systemd[1]: vboxmachines.service operation timed out. Terminating.
Jun 20 07:18:37 localhost.localdomain systemd[1]: Failed to start Virtualbox Headless VM.
Jun 20 07:18:37 localhost.localdomain systemd[1]: Unit vboxmachines.service entered failed state.
ありがとうございます!
答え1
準備プロトコルが一致しません。
Type
サービスの重要性が重要です。この設定は、サービスがプロトコルを準備するために言うとsystemdが期待するものを表します。simple
サービスは即時準備とみなされます。forking
初期プロセスが子プロセスに分岐して終了すると、サービスは準備済みと見なされます。dbus
デスクトップバスにサーバーがある場合、サービスは準備ができていると見なされます。など。
サービス機能に一致するサービスユニットで準備プロトコルを宣言しないと、問題が発生する可能性があります。準備プロトコルの不一致により、サービスが正しく開始されないか(より一般的に)systemdでエラーと診断される可能性があります。準備プロトコルが実行されておらず、サービスを開始できないと見なされると、systemdはエラー中に実行されていた可能性があるサービスのすべての孤立した接続プロセスが終了することを保証し、サービスを正常な動作に復元します。サービスは通常、非アクティブ状態に戻ります。
VBoxHeadless
(無駄に)フォークして終了しません。 VirtualBox docoにはこれが明確に記載されています。したがって、サービスユニットの正しい設定はですType=simple
。
ちなみに、私たちの残りの部分はあなたのサービスユニットのソースを追跡することができますArchLinuxフォーラムの匿名投稿渡すこともできるStackOverflowのフォローアップ投稿なぜなら、Anonymousがそこで作ったスペルミスをコピーしたからです。正確な綴りはです。 2年半が過ぎた今でも(2170ビュー)見つかりませんでした。疑いなく、これはあなたの次の質問でもあります。WantedBy=multi-user.target
Arch Linux Wikiのテンプレートサービスユニットは、仮想マシンのUUIDにパラメータ化されており、これはここで最良の選択です。
追加読書
- 「VBoxHeadless、リモートデスクトップサーバー」。Oracle VM VirtualBox®ユーザーズ・ガイド:リモート仮想マシン。 2004年。オラクル株式会社。
- 「サービスを使用して仮想マシンを起動する」。仮想ボックス。 Arch Linux Wiki。
- ジョナサン・ドボイン・ポラード(2001)。 」「デーモンを背景に置く」ためだけにfork()を使用しないでください。」。 Unixデーモンを設計する際に避けるべき間違い。よく与えられる答えです。