用暴发户运行多个实例

我有一个我写的服务器需要在多个端口上运行。

所以我写了两篇Upstart脚本,比如暴发户文档。 http://upstart.ubuntu.com/cookbook/#instance

派生实例的任务:

# gatling-broadcast.conf description "Start multiple gatling-broadcast servers" console output start on runlevel [2345] task script for i in `seq 21001 21004`; do start gatling-broadcast-worker PORT=$i done end script 

实例脚本:

 # gatling-broadcast-worker.conf description "Gatling-broadcast server." instance $PORT env ROOT="/home/ctargett/Projects/msgqueue" exec $ROOT/env/bin/pypy $ROOT/main.py --mode=broadcast --port=$PORT --log_file_prefix=/tmp/gatling-broadcast-$PORT.log 

我可以运行gatling-broadcast-worker作业的多个版本:

 $ initctl --session start gatling-broadcast-worker PORT=21001 gatling-broadcast-worker (21001) start/running, process 20956 $ initctl --session start gatling-broadcast-worker PORT=21002 gatling-broadcast-worker (21002) start/running, process 20963 $ initctl --session list gatling-broadcast stop/waiting gatling-monitor stop/waiting gatling-broadcast-worker (21002) start/running, process 20963 gatling-broadcast-worker (21001) start/running, process 20956 

然而,当我尝试开始gatling-broadcast工作,我得到一个错误:

 $ initctl --session start gatling-broadcast initctl: Job failed to start 

除了init: gatling-broadcast main process (21007) terminated with status 1之外的init: gatling-broadcast main process (21007) terminated with status 1输出中没有任何帮助init: gatling-broadcast main process (21007) terminated with status 1

 Loading configuration from /home/ctargett/Projects/msgqueue/upstart job_class_unregister: Unregistered job /com/ubuntu/Upstart/jobs/gatling_2dbroadcast conf_file_destroy: Destroyed unused job gatling-broadcast conf_reload_path: Loading gatling-broadcast from /home/ctargett/Projects/msgqueue/upstart/gatling-broadcast.conf parse_job: Creating new JobClass gatling-broadcast job_class_register: Registered job /com/ubuntu/Upstart/jobs/gatling_2dbroadcast job_class_unregister: Unregistered job /com/ubuntu/Upstart/jobs/gatling_2dbroadcast_2dworker conf_file_destroy: Destroyed unused job gatling-broadcast-worker conf_reload_path: Loading gatling-broadcast-worker from /home/ctargett/Projects/msgqueue/upstart/gatling-broadcast-worker.conf parse_job: Creating new JobClass gatling-broadcast-worker job_class_register: Registered job /com/ubuntu/Upstart/jobs/gatling_2dbroadcast_2dworker job_class_unregister: Unregistered job /com/ubuntu/Upstart/jobs/gatling_2dmonitor conf_file_destroy: Destroyed unused job gatling-monitor conf_reload_path: Loading gatling-monitor from /home/ctargett/Projects/msgqueue/upstart/gatling-monitor.conf parse_job: Creating new JobClass gatling-monitor job_class_register: Registered job /com/ubuntu/Upstart/jobs/gatling_2dmonitor job_register: Registered instance /com/ubuntu/Upstart/jobs/gatling_2dbroadcast/_ gatling-broadcast goal changed from stop to start gatling-broadcast state changed from waiting to starting event_new: Pending starting event Handling starting event event_finished: Finished starting event gatling-broadcast state changed from starting to pre-start gatling-broadcast state changed from pre-start to spawned gatling-broadcast main process (21007) gatling-broadcast state changed from spawned to post-start gatling-broadcast state changed from post-start to running event_new: Pending started event Handling started event event_finished: Finished started event init: gatling-broadcast main process (21007) terminated with status 1 gatling-broadcast goal changed from start to stop gatling-broadcast state changed from running to stopping event_new: Pending stopping event Handling stopping event event_finished: Finished stopping event gatling-broadcast state changed from stopping to killed gatling-broadcast state changed from killed to post-stop gatling-broadcast state changed from post-stop to waiting event_new: Pending stopped event job_change_state: Destroyed inactive instance gatling-broadcast Handling stopped event event_finished: Finished stopped event 

我猜想问题在于gatling-broadcast无法启动一个或多个实例,可能是因为它们已经在运行。 记住Upstyart用'sh -e'来运行你的工作,所以如果任何一个简单的命令失败了,这个脚本就会立即退出。 看到:

http://upstart.ubuntu.com/cookbook/#debugging-a-script-which-appears-to-be-behaving-oddly

如果您正在运行Ubuntu Precise,请查看/var/log/upstart/gatling-broadcast.log 。 您可能需要将“ set -x ”添加到脚本节的顶部,以准确查看它失败的位置。

修复很简单:

 script for i in `seq 21001 21004`; do start gatling-broadcast-worker PORT=$i || true done end script 

一个更好的解决scheme是检查gatling-broadcast-worker作业的特定实例的状态,如果它没有运行,则尝试启动它。 如果失败了,采取适当的行动。