追加読書

追加読書

私がやろうとしていることができるかどうかは完全にはわかりません。 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にパラメータ化されており、これはここで最良の選択です。

追加読書

関連情報