【发布时间】:2015-01-20 05:43:38
【问题描述】:
我发现与标准的cloud-config 文件不同,CoreOS 的cloud-config 文件中没有runcmd 选项。目前,我通过将以下内容添加到我的cloud-config 来启用 CoreOS 机器上的交换:
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 进入机器并运行:
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) 如果是前者,那又如何?
【问题讨论】:
标签: digital-ocean systemd coreos swapfile