【问题标题】:How to execute command before starting every service如何在启动每个服务之前执行命令
【发布时间】:2014-12-16 07:32:32
【问题描述】:

我想为 /etc/init.d 中的每个服务设置安全限制说

ulimit -c unlimited

但这应该在发出“service <process> start”或“/etc/init.d/<process> start”时执行。

是否有一个通用路径,这样如果我们写在那里,它将适用于“启动”服务时的所有服务。

【问题讨论】:

  • 如何更改/etc/security/limits.conf 中的每个用户限制?
  • 是的,我已经这样做了,但是在进程崩溃后,如果我们启动服务而不是重新启动,这些配置不会被加载。因此,为了解决这个问题,我想在每个服务的启动中添加它,这不是实现的通用方式
  • 为什么您的设置在启动服务时不起作用?这对我来说似乎很奇怪。这实际上可能是 SuperUser 的问题。
  • 不知道,但是在崩溃后,如果我重新启动服务,我可以找到限制,并且还会创建核心转储。但是,如果我启动,则不是重新启动,而是“核心文件大小”设置为 0。然后,如果发生进程崩溃,则不会生成核心转储。

标签: linux ubuntu coredump init.d sysctl


【解决方案1】:

如果你创建一个像这样的文件:

/etc/init.d/.commonStuff

并将您希望对所有脚本通用的命令放入其中:(不带“#!/usr/bin/bash”行)

# This code is meant to be included by another script.
ulimit -c unlimited
umask 027
THIS_VARIABLE="will exist once the include is completed"
export THIS_VALIABLE    # And now it is exportable too

然后您可以在每个脚本中添加这些行(在方便的地方):

# Include the common settings
. /etc/init.d/.commonStuff

前导点是“包含其他文件”指示符。

确保新文件受到保护(即由 root 拥有),并从中删除可执行标志,以明确它不打算单独执行。 (访问权限不应超过 644)。

【讨论】:

  • 我发现Linux 3.13.0-32-generic 的限制正在正确加载,但Linux 3.2.0-68-virtual 没有发生这种情况,即使没有执行上述操作将其添加到 start) 部分或在 /etc/init.d 中创建公共文件.
  • 在发生之前我遇到过类似的事情,我发现脚本不是以“root”用户身份启动的。我的建议是将这些行添加到您的脚本中(我无法在注释中分隔行,所以我使用分号): ulimit >>/usr/tmp/mytrace ; id >>/usr/tmp/mytrace 这些可能会帮助您弄清楚发生了什么。
  • 谢谢它对我有用。是否有任何其他方式可以在每个服务启动后配置“ulimits”。现在它在崩溃后设置为 0。只有当我重新启动服务时,它才会从 /etc/security/limits 中获取并将其设置为 "unlimited" ,而不是在我启动核心文件大小设置为 0 时重新启动。
【解决方案2】:

/etc/init.d/ 中的文件几乎都是 bash shell 脚本。所以这有点脏,但你可以用脚本替换 /bin/sh,但你必须非常小心你是如何做到的,这样你就不会在这个过程中破坏你的系统。

首先在当前目录下创建一个文件sh.wrap,内容如下:

#/bin/sh.real
ulimit -c unlimited
/bin/sh.real "$@"

然后像这样安装它:

chmod +x sh.wrap
sudo cp /bin/sh /bin/sh.real
sudo mv sh.wrap /bin/sh

这是一个肮脏的黑客,但它可以为你想做的事情工作。

我建议你弄清楚为什么使用 /etc/security/limits.conf 对你不起作用并改用它,但我真的很讨厌“你为什么要这样做?”答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-10
    • 2018-10-03
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    相关资源
    最近更新 更多