我在我的项目中使用Ubuntu 14.04.5
和docker-ce
的最新版本。我希望启用cgroup交换限制功能,因此我将查看您的内核不支持cgroup交换限制功能。一节。
我不想手动修改/etc/default/grub
文件,而是在一个Ansible剧本中修改它,因为我已经有了很多可以设置IT基础设施的剧本。
最简单的解决方案是找到GRUB_CMDLINE_LINUX_DEFAULT
行并追加cgroup_enable=memory swapaccount=1
,而不检查它们是否已经存在。剧本任务将如下所示:
- name: Enable the memory limit.
lineinfile:
path: /etc/default/grub
backrefs: yes
regexp: '^(GRUB_CMDLINE_LINUX_DEFAULT=")(.*)(".*)(注意,最后一个when行是无效的Ansible语法。我把它放在那里是为了展示这个想法。)我设置了一个when条件,如果这两个标志已经有了所需的值,那么它们就不会再被追加了。然而,在以下情况下,它们仍被追加:只有一个存在,例如:GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory"两者都存在,但具有不同的价值,例如:GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=something swapaccount=999" (只是一些愚蠢的值)两者都存在,但都由其他东西分隔开来,例如:GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory somekey=somevalue swapaccount=1"等等。总之,剧本的任务并不完美,我很快就会改进的。我的问题是:如果我以像GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=something swapaccount=999 cgroup_enable=memory swapaccount=1"这样的行结束,那么稍后出现的值(在本例中是“内存”和"1“)会覆盖相同键的早期值(”东西“和"999")吗?我做了测试,结果似乎是这样的。如果它覆盖或不覆盖前面的值,那么指定此行为的正式文档在哪里?我试图在下面的链接中找到它,但并不幸运:GRUB手册2.02配置GRUB 2
line: '\1\2 cgroup_enable=memory swapaccount=1\3'
when: <String `cgroup_enable=memory swapaccount=1` is not present>
(注意,最后一个when
行是无效的Ansible语法。我把它放在那里是为了展示这个想法。)
我设置了一个when
条件,如果这两个标志已经有了所需的值,那么它们就不会再被追加了。然而,在以下情况下,它们仍被追加:
F19H110
只有一个存在,例如:GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory"
H212H113
两者都存在,但具有不同的价值,例如:GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=something swapaccount=999"
(只是一些愚蠢的值)
H215H116
两者都存在,但都由其他东西分隔开来,例如:GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory somekey=somevalue swapaccount=1"
H218H119
等等。
H220F221
总之,剧本的任务并不完美,我很快就会改进的。
我的问题是:
G122H123
如果我以像GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=something swapaccount=999 cgroup_enable=memory swapaccount=1"
这样的行结束,那么稍后出现的值(在本例中是“内存”和"1“)会覆盖相同键的早期值(”东西“和"999")吗?我做了测试,结果似乎是这样的。
H225H126
如果它覆盖或不覆盖前面的值,那么指定此行为的正式文档在哪里?我试图在下面的链接中找到它,但并不幸运:F127H128
H230H131
H233F234H235G236
发布于 2019-09-13 06:37:11
分析这些命令行的不是Grub,所以在Grub手册中不太可能找到关于这一点的任何信息。是linux内核、驱动程序和用户空间程序读取这些内容。因此,您的问题没有明确的答案--一般来说,如果linux内核或驱动程序对其进行解析,它们确实会覆盖前面的值。但是linux中的任何程序都可以通过/proc/cmdline文件读取这些命令行并以任何方式解析它们。因此,我一般建议避免这样做是出于安全考虑。
https://askubuntu.com/questions/1108967
复制相似问题