systemd 服务设置 virsh 默认存储池

systemd 服务设置 virsh 默认存储池

我尝试在 kickstart 自动安装后在系统启动时运行一个脚本,该脚本只会更改 KVM 的默认存储池。但由于某种原因,更改没有生效,如果我手动运行脚本或运行,systemctl start pool.service一切都会正常进行,并且默认池已设置,但如果我systemctl enable pool.service通过 ks.cfg 运行或在安装后手动运行然后重新启动,则不会发生任何变化。我尝试将 pool.service 设置为几种类型(正常、空闲等...),但似乎没有任何帮助。

我正在使用 CentOS 7 x64。

ks配置文件

wget http://my_server/scripts/virsh/pool.service -O /etc/systemd/system/pool.service
wget http://my_server/scripts/virsh/pool -O /usr/bin/pool
chmod 755 /usr/bin/pool
systemctl enable pool.service

pool.service 文件

[Unit]
Description=Set default storage pool

[Service]
Type=idle
ExecStart=/usr/bin/pool

[Install]
WantedBy=multi-user.target

池脚本文件

#!/bin/bash
/usr/bin/virsh pool-start default
/usr/bin/virsh pool-destroy default
/usr/bin/virsh pool-delete default
/usr/bin/virsh pool-undefine default
mkdir /srv/virtual_machines
/usr/bin/virsh pool-define-as default --type dir --target /srv/virtual_machines
/usr/bin/virsh pool-build default
/usr/bin/virsh pool-start default
/usr/bin/virsh pool-autostart default

systemctl disable pool.service

答案1

不要使用Type=idle- 它是专门为登录提示添加的,并且与掷骰子一样可靠。只需明确声明依赖项即可。(对于短时间运行的脚本,Type=oneshot这是正确的。)

您的服务使用 与 libvirtd 通信virsh,这意味着它只能在 libvirtd 已运行时才能工作。因此:

[Unit]
Requires=libvirtd.service
After=libvirtd.service

(如果您的发行版调用服务的方式不同,请进行调整。)

此外,自行禁用服务可能不是最好的主意。相反,你可以使用:

[Unit]
ConditionPathExists=!/srv/virtual_machines

相关内容