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

时间:2014-10-21 06:48:55

标签: linux ubuntu coredump init.d sysctl

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

ulimit -c unlimited

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

是否存在通用路径,因此如果我们在那里写,它将适用于所有服务,即#34;开始&#34;服务。

2 个答案:

答案 0 :(得分:1)

如果您创建类似此文件的文件:

/etc/init.d/.commonStuff

并输入您想要对所有脚本通用的命令:(没有&#39;#!/ usr / bin / bash&#39;行)

# 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

前导点是&#34;包含一些其他文件&#34;指示器。

确保新文件受到保护(即由root拥有),并从中删除可执行标志以清楚表明它并不意味着自己执行。 (访问不应超过644)。

答案 1 :(得分:0)

/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并不适合你,而是使用它,但我真的很讨厌“你为什么要那样做?”答案。