我有以下 systemd 代码。
[Unit]
Description=start RCC logger server process
Requires=rcc-drbd.service rcc_check_locked_scr.service s96rcc.service
After=rcc-drbd.service rcc_check_locked_scr.service s96rcc.service
[Service]
ExecStart= exec /var/RCC/RCClogger.sh
Restart=no
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
在我尝试运行它的地方,出现以下错误。
Mar 23 04:45:52 localhost.localdomain systemd[1]:
[/etc/systemd/system/rcc_logger.service:7] Executable path is not absolute,
ignoring: exec /v...ogger.sh
Mar 23 04:45:52 localhost.localdomain systemd[1]: rcc_logger.service lacks
both ExecStart= and ExecStop= setting. Refusing.
Run Code Online (Sandbox Code Playgroud)
我知道这是因为没有 exec 命令的绝对路径,但是由于 exec 作为二进制文件不可用,我不能使用绝对路径。如何让这个 ExecStart 运行?
Virtualbox 能够向正在运行的虚拟机发出命令:
vboxmanage controlvm NameOfRunningVM acpipowerbutton
Run Code Online (Sandbox Code Playgroud)
但是,此命令会立即返回,这会导致我的情况无法正常关闭。
情况:我计划在 /etc/init.d 脚本中使用它。这将允许正常关闭所有正在运行的 VM。目前,当我发出vboxmanage controlvm NameOfRunningVM acpipowerbutton命令时,关闭会被切断,因为该命令不会等待 VM 关闭。
我需要一个 Bash 脚本,它将 Virtualbox 机器的名称和超时(以秒为单位)作为输入,然后等待 VM 返回到“关机”状态或超时发生?
我不确定这样做的最佳方法是什么。
我正在考虑使用以下命令检查 VM 的状态:
[user@machine ~]$ vboxmanage list runningvms
"VirtualMachineName" {65c93f1f-4508-4119-b07d-ce9e89b23b8e}
Run Code Online (Sandbox Code Playgroud)
bash 脚本可能会轮询正在运行的虚拟机列表。一旦机器名称停止列出,VM 将被视为已完成。