Я пытаюсь написать «начальный» файл конфигурации облака, который выполняет небольшую настройку, прежде чем мой файл конфигурации облака по умолчанию заменит его и вступит во владение. Вот как это выглядит, однако всякий раз, когда он запускает «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
1
Dustin 18 Мар 2015 в 07:21

2 ответа

Пути, указанные systemd, не могут быть относительными. Попробуйте еще раз, указав полный путь /home/core/clustersetup.sh.

1
Brian Redbeard 20 Мар 2015 в 03:46

В моем дистрибутиве (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 в том, что явный путь был бы лучшей идеей. В общем, лучше не привлекать оболочку к выполнению.

0
Greg 20 Мар 2015 в 15:15