2015-03-18 3 views
1

Я пытаюсь написать «начальный» файл облачной конфигурации, который выполняет немного настройки, прежде чем мой файл Cloud-Config по умолчанию заменяет его и берет на себя. Это то, на что похоже, однако всякий раз, когда он запускает «clustersetup.service», он не может найти файл clustersetup.sh, который должен был сохранить. Конечно, если я запускаю это с терминала, он работает нормально. Что я делаю не так?CoreOS - Cloud-Config не сохраняющий файл

#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

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

0

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

Смежные вопросы