BASH 守护进程脚本 amqp-consumer 不持久
BASH daemonize script amqp-consumer not persistant
首先,对不起我的英语:)
我正在尝试守护一个脚本,该脚本使用 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(在我的虚拟机中)中启动该脚本时,一切都很好! amqp-consume 冻结脚本并等待 AMPQ 消息。
但是当脚本启动时,作为守护进程,amqp-consume 会跳过这一步。脚本结束执行...既没有打开 TCP 连接 (netstat -tap) 也没有打开 processus (ps aufx)
这里是具有启动-停止-守护进程用法的守护进程脚本
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 "" in
start|stop)
d_
;;
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 启动时)- 他应该在 "Forward broker message to 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
我不明白这个问题。你有一些tips吗?
如果我遗漏了一些信息,请告诉我!
我不得不 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 &
完成任务!
:)
首先,对不起我的英语:) 我正在尝试守护一个脚本,该脚本使用 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(在我的虚拟机中)中启动该脚本时,一切都很好! amqp-consume 冻结脚本并等待 AMPQ 消息。
但是当脚本启动时,作为守护进程,amqp-consume 会跳过这一步。脚本结束执行...既没有打开 TCP 连接 (netstat -tap) 也没有打开 processus (ps aufx)
这里是具有启动-停止-守护进程用法的守护进程脚本
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 "" in
start|stop)
d_
;;
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 启动时)- 他应该在 "Forward broker message to 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
我不明白这个问题。你有一些tips吗?
如果我遗漏了一些信息,请告诉我!
我不得不 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 &
完成任务!
:)