【问题标题】:BASH daemonize script amqp-consumer not persistantBASH 守护脚本 amqp-consumer 不持久
【发布时间】:2015-03-13 14:33:35
【问题描述】:

首先,对不起我的英语:) 我正在尝试对使用 bash AMQP 客户端库(amqp-tools)的脚本进行守护,以允许通过 RabbitMQ 代理转发消息。

这里是脚本 encrypter_mom_mailconsumer.sh 的一部分

write_log INF "Forward broker message to encrypter_mom_mailencrypter.sh"
/usr/bin/amqp-consume \
    --server broker1.rmq:5672 \
    --vhost "/" \
    --username ub1v1 --password aze \
    --exchange amq.direct \
    --routing-key to_encrypt \
    --declare \
    --queue q_encrypt \
    . /home/rabbit/encrypter_mom_mailencrypter.sh

当我在 shell 中(在我的 vm 中)启动该脚本时,一切都很好! amqp-consume 冻结脚本并等待 AMPQ 消息。

但是当脚本在启动时启动,作为一个守护进程,amqp-consume 只是跳过这一步。脚本结束了它的执行......并且既没有打开 TCP 连接(netstat -tap)也没有打开进程(ps aufx)

这里是使用 start-stop-daemon 的守护程序脚本

DAEMON="/home/rabbit/encrypter_mom_mailconsumer.sh"
DAEMON_OPT=""
DAEMON_USER="rabbit"
DAEMON_NAME="encrypter_mom_mailconsumer.sh"

PATH="/sbin:/bin:/usr/sbin:/usr/bin"

test -x $DAEMON || exit 0
. /lib/lsb/init-functions

d_start () {
    log_daemon_msg "Starting system $DAEMON_NAME Daemon"
    start-stop-daemon --background --start --quiet --chuid $DAEMON_USER --exec $DAEMON -- $DAEMON_OPT
    log_end_msg $?
}

d_stop () {
    log_daemon_msg "Stopping system $DAEMON_NAME Daemon"
    start-stop-daemon --name $DAEMON_NAME --stop --retry 5 --quiet --name $DAEMON_NAME
    log_end_msg $?
}

case "$1" in
    start|stop)
        d_${1}
        ;;

    restart|reload|force-reload)
        d_stop
        d_start
        ;;

    force-stop)
        d_stop
        killall -q $DAEMON_NAME || true
        sleep 2
        killall -q -9 $DAEMON_NAME || true
        ;;

    status)
        status_of_proc "$DAEMON_NAME" "$DAEMON" "system-wide $DAEMON_NAME" && exit 0 || exit $?
        ;;
    *)
        echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|force-stop|restart|reload|force-reload|status}"
        exit 1
        ;;
esac
exit 0

encrypter_mom_mailconsumer.sh 的日志(在 vm 启动时) - 他应该停止并等待“将代理消息转发到 encrypter_mom_mailencrypter.sh”步骤

2015/03/13 15:15:25 [START] : Executing encrypter_mom_mailconsumer...
2015/03/13 15:15:25 [INFO] : Check script arguments and owner
2015/03/13 15:15:25 [INFO] : Forward broker message to encrypter_mom_mailencrypter.sh
2015/03/13 15:15:27 [INFO] : Status: 1
2015/03/13 15:15:27 [END] : Successfully executed

我不明白这个问题。你有什么建议吗?

如果我遗漏了一些信息,请告诉我!

【问题讨论】:

  • 快速建议:在脚本末尾添加另一个日志写入,它会显示在日志中吗?
  • amqp-consume 有调试选项吗?像-v 用于详细模式或类似的东西?您可以将其添加到 encrypter_mom_mailconsumer.sh 中,看看它是否对您有帮助。
  • 感谢您的建议...我应该这样做的。我用另一种方式解决了这个问题,几乎没有错误。但是谢谢你的回答,伙计们

标签: bash daemon amqp


【解决方案1】:

我必须 nohup 我的 amqp-consume 命令,并使用 & 将其作为后台进程启动。

我只需要注意我停止 VM 的方式,rabbitmq 需要清理它的交换和队列。

所以:

write_log INF "Forward broker message to encrypter_mom_mailencrypter.sh"
nohup /usr/bin/amqp-consume \
    --server broker1.rmq:5672 \
    --vhost "/" \
    --username ub1v1 --password aze \
    --exchange amq.direct \
    --routing-key to_encrypt \
    --declare \
    --queue q_encrypt \
    /bin/bash /home/rabbit/encrypter_mom_mailencrypter.sh &

完成了任务!

:)

【讨论】:

    猜你喜欢
    • 2013-09-28
    • 1970-01-01
    • 2013-10-14
    • 2014-09-05
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    相关资源
    最近更新 更多