我编写了一个脚本来启动/停止/重新启动自定义服务器应用程序。
启动守护程序服务器时,它应该执行以下操作:
#!/bin/sh -e
### BEGIN INIT INFO
...
...
### END INIT INFO
# Start service
pga_server_start()
{
/opt/pga/server/server -d
}
# Stop service
pga_server_stop()
{
PID=`cat /var/lock/pga_server.lock`
/bin/kill --signal SIGTERM $PID
}
pga_load_excalibur()
{
is_loaded=`lsmod | grep excalbr`
echo "Done"
if [ -z "$is_loaded" ]; then
/usr/local/bin/excload
echo "Driver excalibur loaded."
else
echo "Driver excalibur already loaded."
fi
}
case "$1" in
start)
pga_load_excalibur
pga_server_start
;;
...
...
最初它运行良好。然后我添加了 pga_load_excalibur
函数。
之后,它不再起作用了。
它永远不会从函数 pga_load_excalibur
返回。
似乎调用 is_loaded=
lsmod | grep excalbr永远不会返回,因为后续的
echo` 永远不会被打印。
但是,如果我将此函数复制/粘贴到一个单独的 shell 脚本中……它会起作用。
但是如果我以这种方式手动启动启动脚本:
/etc/init.d/server 启动 或者 服务服务器启动
它不起作用。 我使用的是 Debian Wheezy 7.9 x64。
虽然我不是 schell 脚本,但看起来是正确的。我不明白为什么当它嵌入到这个服务启动脚本中时它不起作用。
请注意,我还尝试将 grep 行替换为:
is_loaded=$(lsmod | grep excalbr)
但它也不起作用。 我的想法用完了:(
Z.
最佳答案
如果在 Debug模式下运行脚本,您会得到什么?尝试运行它:
#!/bin/sh -xv
这可能会给出失败原因的一些想法,如果您无法弄清楚,请发布输出
关于linux - shell 脚本中的函数未正确执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37328270/