служба systemd для установки пула хранения virsh по умолчанию

418
Alex Zel

Я пытаюсь запустить скрипт при загрузке системы после автоматической установки кикстарта, скрипт просто меняет пул хранения по умолчанию для KVM. Но по какой-то причине изменения не вступают в силу, если я запускаю сценарий вручную или systemctl start pool.serviceвсе запускается нормально, и пул по умолчанию установлен, но если я запускаю systemctl enable pool.serviceчерез ks.cfg или вручную после установки, а затем перезагружаюсь, ничего не меняется. Я попытался установить pool.service на несколько типов (обычный, бездействующий и т. Д.), Но, похоже, ничего не помогло.

Я работаю над CentOS 7 x64.

ks.cfg

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 
0
Почему бы тебе просто не сделать это в кикстарте? Michael Hampton 8 лет назад 0
Я пытался, но после перезагрузки пул по умолчанию не меняется. Alex Zel 8 лет назад 0

1 ответ на вопрос

1
grawity

Don't use Type=idle – it was added specifically for the login prompt, and is about as reliable as a dice roll. Just declare the dependencies explicitly. (For a short-running script, Type=oneshot is right.)

Your service communicates with libvirtd using virsh, meaning it can only work when libvirtd is already running. Therefore:

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

(Adjust if your distribution calls the service differently.)

Also, self-disabling services might not be the best idea. Instead, you could use:

[Unit] ConditionPathExists=!/srv/virtual_machines 
Это сработало отлично, я хотел попробовать поставить его в цикле, но этот метод намного лучше, спасибо grawity Alex Zel 8 лет назад 0

Похожие вопросы