包含/etc/init.d/functions后Bash脚本停止

问题描述:

我正在CentOS 7上创建我的第一个初始化脚本。我想在此脚本中以deamon的身份运行一个进程,并尝试使用/ etc/init.d/functions文件,但是当我包含此脚本执行停止。包含/etc/init.d/functions后Bash脚本停止

假设我创建的文件是 “/etc/init.d/UpdateScript” 如果我写:

echo "Script start" 
. /etc/init.d/functions 
echo "After add functions" 

于是命令后: /etc/init.d/UpdateScript开始

我只有“脚本启动”作为输出。但是,如果我评论“#./etc/init.d/functions”,我也有“添加函数之后”,当然还有“守护进程:命令未找到”。 这种奇怪行为的原因是什么?如何解决它?

+0

尝试'set -x'来查看'/ etc/init.d/functions'正在退出的位置。 –

+0

'/ etc/init.d'在CentOS 7中被弃用,切换到systemd。尝试寻找'/ lib/lsb/init-functions'以获得更便携的选择。如果你还没有安装'redhat-lsb-core'软件包,你需要安装它。更好的是,编写一个systemd'.service'文件,而不是init.d-style启动脚本。 –

+0

你在脚本中使用'set -e'吗? –

/etc/init.d/functionsreturn 0结尾。当source(或.)是一个shell脚本时,你实际上将source呼叫替换为其内容。由于在那里有回报,所以执行不会继续执行,并且echo "After add functions"从不执行。

+0

什么版本的CentOS 7以'return 0'结尾?它不在我的7.2系统上。 (它怎么可能,甚至?'return'只能在函数内部工作。) –

+0

在Fedora 26上注意到了这一点。我猜这在CentOS/RHEL系统上是类似的,但我没有一个在检查。 – Mureinik

+0

是的,它确实以“return 0”结尾,可能是因为init.d的弃用。 – kukuruzo91