我编写了一个脚本来启动/停止/重启自定义服务器应用程序。
启动守护程序服务器时,它应该执行以下操作:
#!/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 never returns as the subsequent
echo`。
但是,如果我在单独的shell脚本中复制/粘贴此函数......它可以正常工作。
但是如果我以这种方式手动启动启动脚本:
/etc/init.d/server start 要么 服务服务器启动
它不起作用。 我使用的是Debian Wheezy 7.9 x64。
虽然我不是一个schell脚本,但它看起来是正确的。我不明白为什么它嵌入到这个服务启动脚本中时不起作用。
请注意,我还尝试用以下代码替换grep行:
is_loaded=$(lsmod | grep excalbr)
但它也不起作用。 我的想法已经不多了:(
Ž。
答案 0 :(得分:1)
如果在调试模式下运行脚本,会得到什么?尝试运行它:
#!/bin/sh -xv
这可能会让人知道它失败的原因,如果你无法弄明白就输出结果