我正在尝试编写一个“初始”的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发布于 2015-03-20 08:46:02
systemd指定的路径不能是相对路径。请在指定完整路径/home/core/clustersetup.sh的情况下重试。
发布于 2015-03-20 20:15:54
在我的发行版(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参与执行。
https://stackoverflow.com/questions/29114083
复制相似问题