【发布时间】:2016-05-19 15:49:17
【问题描述】:
我编写了一个脚本来启动/停止/重新启动自定义服务器应用程序。
在启动守护服务器时,它应该进行以下操作:
#!/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 excalbrnever returns as the subsequentecho` 永远不会被打印出来。
但是,如果我将此函数复制/粘贴到单独的 shell 脚本中...它可以工作。
但如果我以这种方式手动启动启动脚本:
/etc/init.d/服务器启动 或者 服务服务器启动
它不起作用。 我使用的是 Debian Wheezy 7.9 x64。
虽然我不是 schell 脚本,但它看起来是正确的。我不明白为什么当它嵌入到这个服务启动脚本中时它不起作用。
请注意,我也尝试将 grep 行替换为:
is_loaded=$(lsmod | grep excalbr)
但它也不起作用。 我的想法不多了:(
Z.
【问题讨论】: