首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CoreOS云-配置中执行命令(例如添加交换)

在CoreOS云-配置中执行命令(例如添加交换)
EN

Stack Overflow用户
提问于 2014-11-21 23:37:40
回答 2查看 3K关注 0票数 11

我看到,与标准的cloud-config文件不同,CoreOS cloud-config文件中没有runcmd选项。目前,我在CoreOS机器上通过向cloud-config添加以下内容来启用交换:

代码语言:javascript
复制
units:
    - name: swap.service
      command: start
      content: |
        [Unit]
        Description=Turn on swap

        [Service]
        Type=oneshot
        Environment="SWAPFILE=/1GiB.swap"
        RemainAfterExit=true
        ExecStartPre=/usr/sbin/losetup -f ${SWAPFILE}
        ExecStart=/usr/bin/sh -c "/sbin/swapon $(/usr/sbin/losetup -j ${SWAPFILE} | /usr/bin/cut -d : -f 1)"
        ExecStop=/usr/bin/sh -c "/sbin/swapoff $(/usr/sbin/losetup -j ${SWAPFILE} | /usr/bin/cut -d : -f 1)"
        ExecStopPost=/usr/bin/sh -c "/usr/sbin/losetup -d $(/usr/sbin/losetup -j ${SWAPFILE} | /usr/bin/cut -d : -f 1)"

        [Install]
        WantedBy=local.target

然后,在初始化我的CoreOS映像之后,我必须将ssh放到机器中并运行:

代码语言:javascript
复制
sudo fallocate -l 1024m /1GiB.swap && sudo chmod 600 /1GiB.swap \
&& sudo chattr +C /1GiB.swap && sudo mkswap /1GiB.swap

sudo reboot

在交换之前将启用(例如,如top所证明的)。

似乎我应该能够在cloud-config文件本身中完成后一个命令,但我不清楚如何在cloud-config中没有runmcd字段的情况下运行这样的命令。也许可以通过编辑我的swap.service单元或添加另一个unit来实现这一点,但我还不太清楚如何做到这一点。

因此,这就给我留下了两个问题:(1)是否可以这样做,还是总是需要手动运行最后的命令?(2)如果是前者,那么如何运行?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-12 16:58:21

@cboettig -感谢您的单元文件示例和@philibaker注释,我做到了这一点--基本上,我所要做的就是将ExecStartPre更改为:

代码语言:javascript
复制
ExecStartPre=/bin/bash -c "\
    fallocate -l 2g $SWAPFILE && \
    chmod 600 $SWAPFILE && \
    chattr +C $SWAPFILE && \
    mkswap $SWAPFILE && \
    losetup -f $SWAPFILE"

这包括在preexec步骤中的整个设置。

票数 3
EN

Stack Overflow用户

发布于 2014-11-24 00:24:08

正如在这是对吉特布问题的回答中指出的,您最终会编写一个单元来调用您选择的命令。这个答案给出了一个使用任意命令的好例子:

代码语言:javascript
复制
#cloud-config 
....
coreos:
  units:
    - name: runcmd.service
      command: start
      content: |
        [Unit]
        Description=Creates a tmp foo file

        [Service]
        Type=oneshot
        ExecStart=/bin/sh -c "touch /tmp/foo;"
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27072198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档