我尝试在 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