如何在启动每个服务之前执行命令



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

ulimit -c unlimited

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

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

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

/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)。

/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对你不起作用,并使用它,但我真的很讨厌"你为什么要这么做?"的答案。

最新更新