#!/bin/bash if [ `hostname -s` != wbgrp-svc107 ] ; then echo $0 expects to run on wbgrp-svc107 exit 1 fi _status() { something_running=1 warcprox_pids=( $(pgrep -f /home/nlevitt/workspace/warcprox/warcprox-ve34/bin/warcprox) ) worker_pids=( $(pgrep -f 'ssh .*brozzler-worker') ) pywayback_pids=( $(pgrep -f /home/nlevitt/workspace/pygwb/pygwb-ve27/bin/gunicorn) ) ait_brozzler_boss=( $(pgrep -f /home/nlevitt/workspace/ait5/scripts/ait-brozzler-boss.py) ) ait5_pids=( $(pgrep -f 0.0.0.0:8888) ) console_pids=( $(pgrep -f app=.*brozzler-webconsole.py) ) pids="${warcprox_pids[*]} ${worker_pids[*]} ${pywayback_pids[*]} ${ait_brozzler_boss[*]} ${ait5_pids[*]} ${console_pids[*]}" if [ "$pids" != " " ] ; then PS_FORMAT=user,pid,tid,ppid,pgid,sid,pri,nice,psr,%cpu,%mem,tty,stat,stime,time,args ps ww -H $pids echo something_running=0 fi [ -z "${warcprox_pids[*]}" ] && echo "$0: warcprox is not running" [ -z "${worker_pids[*]}" ] && echo "$0: brozzler-workers are not running" [ -z "${pywayback_pids[*]}" ] && echo "$0: pywayback is not running" [ -z "${ait_brozzler_boss[*]}" ] && echo "$0: ait-brozzler-boss.py is not running" [ -z "${ait5_pids[*]}" ] && echo "$0: ait5 is not running" [ -z "${console_pids[*]}" ] && echo "$0: brozzler-webconsole.py is not running" return $something_running } _stop() { if _status ; then set -x pkill -f /home/nlevitt/workspace/pygwb/pygwb-ve27/bin/gunicorn pkill -f /home/nlevitt/workspace/ait5/scripts/ait-brozzler-boss.py pkill -f 0.0.0.0:8888 pkill -f app=.*brozzler-webconsole.py for node in aidata{400,401}{,-bu} ; do ssh $node pkill -f brozzler-worker done for node in wbgrp-svc{110,111} ; do ssh $node pkill -f /home/nlevitt/workspace/warcprox/warcprox-ve34/bin/warcprox done set +x fi if _status > /dev/null ; then while _status > /dev/null ; do sleep 0.5 ; done fi echo "$0: all services stopped" } _reset() { if _status ; then echo "$0: looks like something's still running, run '$0 stop' before resetting" exit 1 fi tstamp=$(date +"%Y%m%d%H%M%S") echo "renaming rethinkdb database archiveit_brozzler to archiveit_brozzler_$tstamp" PYTHONPATH=/home/nlevitt/workspace/brozzler/brozzler-ve34/lib/python3.4/site-packages python3.4 <>/1/brzl/logs/warcprox-$node.out & while ! rethinkdb_tables_ready stats:0 captures:2 services:0 ; do sleep 1 ; done done } start_brozzler_boss() { echo $0: starting ait-brozzler-boss.py venv=/home/nlevitt/workspace/ait5/ait5-ve34 PYTHONPATH=$venv/lib/python3.4/site-packages $venv/bin/python /home/nlevitt/workspace/ait5/scripts/ait-brozzler-boss.py &>> /1/brzl/logs/ait-brozzler-boss.out & while ! rethinkdb_tables_ready stats:0 services:0 jobs:0 pages:1 sites:2 ; do sleep 1 ; done } start_brozzler_workers() { echo $0: starting brozzler-workers for node in aidata{400,401}{,-bu} ; do ssh -fn $node DISPLAY=:1 XAUTHORITY=/tmp/Xauthority.nlevitt PYTHONPATH=/home/nlevitt/workspace/brozzler/brozzler-ve34/lib/python3.4/site-packages:/home/nlevitt/workspace/brozzler /home/nlevitt/workspace/brozzler/brozzler-ve34/bin/brozzler-worker --rethinkdb-servers=wbgrp-svc036,wbgrp-svc020,wbgrp-svc035 --rethinkdb-db=archiveit_brozzler --max-browsers=10 &>> /1/brzl/logs/brozzler-worker-$node.out while ! rethinkdb_tables_ready jobs:0 pages:1 sites:2 ; do sleep 1 ; done done } start_pywayback() { echo $0: starting pywayback PYTHONPATH=/home/nlevitt/workspace/pygwb/pygwb-ve27/lib/python2.7/site-packages WAYBACK_CONFIG=/home/nlevitt/workspace/pygwb/gwb.yaml PATH=/home/nlevitt/workspace/pygwb/pygwb-ve27/bin:/usr/bin:/bin /home/nlevitt/workspace/pygwb/start-gwb.sh &>> /1/brzl/logs/pywayback.out & while ! rethinkdb_tables_ready captures:2 ; do sleep 1 ; done } start_ait5() { echo $0: starting ait5 partner webapp PYTHONPATH=/home/nlevitt/workspace/ait5/ait5-ve34/lib/python3.4/site-packages /home/nlevitt/workspace/ait5/ait5-ve34/bin/python /home/nlevitt/workspace/ait5/manage.py runserver_plus 0.0.0.0:8888 &>> /1/brzl/logs/ait5.out & } start_brozzler_console() { echo $0: starting brozzler web console PYTHONPATH=/home/nlevitt/workspace/brozzler/webconsole/brozzler-webconsole-ve34/lib/python3.4/site-packages /home/nlevitt/workspace/brozzler/webconsole/brozzler-webconsole-ve34/bin/flask --debug --app=/home/nlevitt/workspace/brozzler/webconsole/brozzler-webconsole.py run --host=0.0.0.0 --port=8081 &>> /1/brzl/logs/brozzler-console.out & } start_dead() { warcprox_pids=( $(pgrep -f /home/nlevitt/workspace/warcprox/warcprox-ve34/bin/warcprox) ) worker_pids=( $(pgrep -f 'ssh .*brozzler-worker') ) pywayback_pids=( $(pgrep -f /home/nlevitt/workspace/pygwb/pygwb-ve27/bin/gunicorn) ) ait_brozzler_boss=( $(pgrep -f /home/nlevitt/workspace/ait5/scripts/ait-brozzler-boss.py) ) ait5_pids=( $(pgrep -f 0.0.0.0:8888) ) console_pids=( $(pgrep -f app=.*brozzler-webconsole.py) ) [ -z "${warcprox_pids[*]}" ] && start_warcprox [ -z "${worker_pids[*]}" ] && start_brozzler_workers [ -z "${pywayback_pids[*]}" ] && start_pywayback [ -z "${ait_brozzler_boss[*]}" ] && start_brozzler_boss [ -z "${ait5_pids[*]}" ] && start_ait5 [ -z "${console_pids[*]}" ] && start_brozzler_console } _start() { if _status > /dev/null ; then echo "$0: can't start because something's still running" exit 1 fi set -e start_warcprox start_brozzler_boss start_brozzler_workers start_pywayback start_ait5 start_brozzler_console echo $0: logs are in /1/brzl/logs echo $0: warcs are in /1/brzl/warcs } usage() { echo "Usage: $0 status|start|stop|restart|reset|start-dead" } if [ $# != 1 ] ; then usage exit 1 elif [ $1 = 'status' ] ; then _status elif [ $1 = 'stop' ] ; then _stop elif [ $1 = 'start' ] ; then _start elif [ $1 = 'restart' ] ; then _stop _start elif [ $1 = 'reset' ] ; then _reset elif [ $1 = 'start-dead' ] ; then start_dead else usage exit 1 fi