我有一个我写的服务器需要在多个端口上运行。
所以我写了两篇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作业的特定实例的状态,如果它没有运行,则尝试启动它。 如果失败了,采取适当的行动。