如何在启动时将 minikube start 作为 Linux 服务运行?

mar*_*ark 3 systemd minikube

这个问题与如何将非管理命令安排为 systemd 服务?

\n

我有以下 minikube.service 文件:

\n
[Unit]\nDescription=Runs minikube on startup\nAfter=vboxautostart-service.service vboxballoonctrl-service.service vboxdrv.service vboxweb-service.service\n\n[Service]\nType=forking\nExecStart=/usr/local/bin/minikube start\nUser=mark\nGroup=mark\n\n[Install]\nWantedBy=multi-user.target\n
Run Code Online (Sandbox Code Playgroud)\n

当我从 shell 手动启动它时,它工作正常:

\n
mark@minikube-vm:~$ sudo systemctl start minikube.service\nmark@minikube-vm:~$ minikube ip\n192.168.99.100\nmark@minikube-vm:~$ systemctl status minikube.service\n\xe2\x97\x8f minikube.service - Runs minikube on startup\n   Loaded: loaded (/etc/systemd/system/minikube.service; enabled; vendor preset: enabled)\n   Active: active (running) since Fri 2020-09-25 17:32:48 UTC; 34min ago\n  Process: 8388 ExecStart=/usr/local/bin/minikube start (code=exited, status=0/SUCCESS)\n    Tasks: 46 (limit: 19141)\n   CGroup: /system.slice/minikube.service\n           \xe2\x94\x9c\xe2\x94\x808434 /usr/lib/virtualbox/VBoxXPCOMIPCD\n           \xe2\x94\x9c\xe2\x94\x808439 /usr/lib/virtualbox/VBoxSVC --auto-shutdown\n           \xe2\x94\x9c\xe2\x94\x808618 /usr/lib/virtualbox/VBoxHeadless --comment minikube --startvm 6ec91432-0f09-4fdc-9976-6f736b15c37f --vrde config\n           \xe2\x94\x9c\xe2\x94\x808632 /usr/lib/virtualbox/VBoxNetDHCP --comment HostInterfaceNetworking-vboxnet0 --config /tmp/dhcp-config-kiyf3.xml\n           \xe2\x94\x94\xe2\x94\x808658 /usr/bin/pulseaudio --start --log-target=syslog\n\nSep 25 17:31:22 minikube-vm minikube[8388]: * Using the virtualbox driver based on existing profile\nSep 25 17:31:22 minikube-vm minikube[8388]: * Starting control plane node minikube in cluster minikube\nSep 25 17:31:22 minikube-vm minikube[8388]: * Restarting existing virtualbox VM for "minikube" ...\nSep 25 17:31:23 minikube-vm pulseaudio[8658]: [pulseaudio] server-lookup.c: Unable to contact D-Bus: org.freedesktop.DBus.Error.NotSu\nSep 25 17:31:23 minikube-vm pulseaudio[8658]: [pulseaudio] main.c: Unable to contact D-Bus: org.freedesktop.DBus.Error.NotSupported:\nSep 25 17:32:16 minikube-vm minikube[8388]: * Preparing Kubernetes v1.19.0 on Docker 19.03.12 ...\nSep 25 17:32:43 minikube-vm minikube[8388]: * Verifying Kubernetes components...\nSep 25 17:32:48 minikube-vm minikube[8388]: * Enabled addons: dashboard, default-storageclass, storage-provisioner\nSep 25 17:32:48 minikube-vm minikube[8388]: * Done! kubectl is now configured to use "minikube" by default\nSep 25 17:32:48 minikube-vm systemd[1]: Started Runs minikube on startup.\nmark@minikube-vm:~$\n
Run Code Online (Sandbox Code Playgroud)\n

但在机器启动时失败:

\n
mark@minikube-vm:~$ systemctl status minikube.service\n\xe2\x97\x8f minikube.service - Runs minikube on startup\n   Loaded: loaded (/etc/systemd/system/minikube.service; enabled; vendor preset: enabled)\n   Active: failed (Result: timeout) since Fri 2020-09-25 17:18:09 UTC; 12min ago\n  Process: 7140 ExecStart=/usr/local/bin/minikube start (code=killed, signal=TERM)\n\nSep 25 17:16:39 minikube-vm minikube[7140]: * Using the virtualbox driver based on existing profile\nSep 25 17:16:39 minikube-vm minikube[7140]: * Starting control plane node minikube in cluster minikube\nSep 25 17:16:39 minikube-vm minikube[7140]: * Restarting existing virtualbox VM for "minikube" ...\nSep 25 17:16:40 minikube-vm pulseaudio[7438]: [pulseaudio] server-lookup.c: Unable to contact D-Bus: org.freedesktop.DBus.Error.NotSu\nSep 25 17:16:40 minikube-vm pulseaudio[7438]: [pulseaudio] main.c: Unable to contact D-Bus: org.freedesktop.DBus.Error.NotSupported:\nSep 25 17:17:34 minikube-vm minikube[7140]: * Preparing Kubernetes v1.19.0 on Docker 19.03.12 ...\nSep 25 17:18:06 minikube-vm minikube[7140]: * Verifying Kubernetes components...\nSep 25 17:18:08 minikube-vm systemd[1]: minikube.service: Start operation timed out. Terminating.\nSep 25 17:18:09 minikube-vm systemd[1]: minikube.service: Failed with result \'timeout\'.\nSep 25 17:18:09 minikube-vm systemd[1]: Failed to start Runs minikube on startup.\nmark@minikube-vm:~$\n
Run Code Online (Sandbox Code Playgroud)\n

我缺少什么?

\n

Mic*_*ton 6

您已经启动了一个“服务”,它基本上只是一个运行一些命令然后退出的脚本。这种事情应该在 systemd 单元中使用Type=oneshotand RemainAfterExit=yes,以便 systemd 知道该进程将消失,但仍然认为“服务”处于活动状态。

为了完整起见,您还应该添加一条ExecStop=停止 minikube 的匹配行。

systemd 文档有另一个此类单元的示例。