Я пытаюсь написать «начальный» файл конфигурации облака, который выполняет небольшую настройку, прежде чем мой файл конфигурации облака по умолчанию заменит его и вступит во владение. Вот как это выглядит, однако всякий раз, когда он запускает «clustersetup.service», он не может найти файл clustersetup.sh, который должен был быть сохранен. Конечно, если я запускаю это с терминала, все работает нормально. Что я делаю неправильно?
#cloud-config
coreos:
etcd:
addr: $private_ipv4:4001
peer-addr: $private_ipv4:7001
fleet:
public-ip: $private_ipv4
units:
- name: clustersetup.service
command: start
content: |
[Unit]
Description=Cluster Setup
[Service]
ExecStartPre=/usr/bin/wget -q http://10.0.2.2:8080/clustersetup.sh -O ~/clustersetup.sh
ExecStart=/usr/bin/bash ~/clustersetup.sh
ExecStop=/usr/bin/bash
2 ответа
Пути, указанные systemd, не могут быть относительными. Попробуйте еще раз, указав полный путь /home/core/clustersetup.sh
.
В моем дистрибутиве (ubuntu) bash находится в /bin. Одна вещь, которую вы могли бы сделать, это:
ExecStartPre=/bin/bash -c '/usr/bin/wget -q http://10.0.2.2:8080/clustersetup.sh -O ~/clustersetup.sh'
ExecStart=/bin/bash -c ~/clustersetup.sh'
Я думаю, вы получите правильное расширение ~ при проталкивании его через оболочку. Однако ~ будет относиться к идентификатору процесса, выполняющего скрипт (я точно не знаю, что это ядро). Если вы хотите убедиться, вы можете:
ExecStartPre=/bin/bash -c '/usr/bin/wget -q http://10.0.2.2:8080/clustersetup.sh -O ~core/clustersetup.sh'
ExecStart=/bin/bash -c ~core/clustersetup.sh'
Я не тестировал это. Я согласен с @Brian в том, что явный путь был бы лучшей идеей. В общем, лучше не привлекать оболочку к выполнению.
Похожие вопросы
Новые вопросы
coreos
CoreOS предоставляет новую серверную операционную систему для запуска тысяч самих серверов.