我正在尝试编写一个“初始”cloud-config文件,在我的默认Cloud-Config文件替换它并接管之前进行一些设置。这就是它的样子,但无论何时运行“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
答案 0 :(得分:1)
systemd指定的路径不能是相对的。再次尝试指定完整路径/home/core/clustersetup.sh
。
答案 1 :(得分: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'
我认为在推动它时,你会得到〜的正确扩展。但是,〜将相对于执行脚本的进程id(我不知道肯定是核心)。如果你想确定,你可以:
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的意见,明确的路径是一个更好的主意。一般来说,最好不要让shell参与执行。