我为我编写了一个脚本来启动和停止我的Perforce服务器。要关闭服务器,我使用kill -SIGTERM
命令和服务器守护程序的PID。它可以正常工作,但我的脚本中有一些关于输出行为的差异。
该脚本如下所示:
#!/bin/sh -e
export P4JOURNAL=/var/log/perforce/journal
export P4LOG=/var/log/perforce/p4err
export P4ROOT=/var/local/perforce_depot
export P4PORT=1666
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
. /lib/lsb/init-functions
p4start="p4d -d"
p4stop="p4 admin stop"
p4user=perforce
case "$1" in
start)
log_action_begin_msg "Starting Perforce Server"
daemon -u $p4user -- $p4start;
echo "\n"
;;
stop)
echo "BLABLA"
echo "$(pidof /usr/local/bin/p4d)"
#daemon -u $p4user -- $p4stop;
p4dPid="$(pidof /usr/local/bin/p4d)"
echo $p4dPid
if [ -z "$(pidof /usr/local/bin/p4d)" ]; then
echo "ERROR: No Perforce Server running!"
else
echo "SUCCESS: Found Perforce Server running!\n\t"
echo "Shutting down Perforce Server..."
kill -15 $p4dPid;
fi
echo "\n"
;;
restart)
stop
start
;;
*)
echo "Usage: /etc/init.d/perforce (start|stop|restart)"
exit 1
;;
esac
exit 0
当p4d
正在运行时,stop
块按预期工作,但当没有p4d
运行带有stop
的脚本时,只输出BLABLA
和由于echo "$(pidof /usr/local/bin/p4d)"
而空新行。永远不会打印出表明没有服务器正在运行的错误消息。我在这里做错了什么?
PS:出于调试原因,部分if [ -z "$(pidof /usr/local/bin/p4d)" ]; then
已从if [ -z "$p4dPid" ]; then
更改。
p4dPid
变量并注释掉行p4dPid="$(pidof /usr/local/bin/p4d)"
和echo $p4dPid
,则会处理if
块并打印错误消息。我仍然不知道导致这种行为的原因。
编辑2:问题解决了!
-e
中的#!/bin/sh -e
导致shell在任何语句返回非零返回值后退出脚本。
答案 0 :(得分:1)
当您的服务未运行时,命令
echo "$(pidof /usr/local/bin/p4d)"
作为
处理echo ""
因为pidof
没有返回任何字符串。所以命令输出一个空行。
如果您不想要这个空行,那么只需删除此语句,然后在进程未运行时打印出错误消息。
答案 1 :(得分:0)
问题解决了!
-e
中的#!/bin/sh -e
导致shell在任何返回非零返回值的语句后退出。