#!/usr/bin/env bash ## # This section should match your Makefile ## PY=${PY:-python3} PELICAN=${PELICAN:-pelican} PELICANOPTS= BASEDIR=$(pwd) INPUTDIR=$BASEDIR/content OUTPUTDIR=$BASEDIR/output CONFFILE=$BASEDIR/pelicanconf.py ### # Don't change stuff below here unless you are sure ### SRV_PID=$BASEDIR/srv.pid PELICAN_PID=$BASEDIR/pelican.pid function usage(){ echo "usage: $0 (stop) (start) (restart) [port]" echo "This starts Pelican in debug and reload mode and then launches" echo "an HTTP server to help site development. It doesn't read" echo "your Pelican settings, so if you edit any paths in your Makefile" echo "you will need to edit your settings as well." exit 3 } function alive() { kill -0 $1 >/dev/null 2>&1 } function shut_down(){ PID=$(cat $SRV_PID) if [[ $? -eq 0 ]]; then if alive $PID; then echo "Stopping HTTP server" kill $PID else echo "Stale PID, deleting" fi rm $SRV_PID else echo "HTTP server PIDFile not found" fi PID=$(cat $PELICAN_PID) if [[ $? -eq 0 ]]; then if alive $PID; then echo "Killing Pelican" kill $PID else echo "Stale PID, deleting" fi rm $PELICAN_PID else echo "Pelican PIDFile not found" fi } function start_up(){ local port=$1 echo "Starting up Pelican and HTTP server" shift $PELICAN --debug --autoreload -r $INPUTDIR -o $OUTPUTDIR -s $CONFFILE $PELICANOPTS & pelican_pid=$! echo $pelican_pid > $PELICAN_PID mkdir -p $OUTPUTDIR && cd $OUTPUTDIR $PY -m pelican.server $port & srv_pid=$! echo $srv_pid > $SRV_PID cd $BASEDIR sleep 1 if ! alive $pelican_pid ; then echo "Pelican didn't start. Is the Pelican package installed?" return 1 elif ! alive $srv_pid ; then echo "The HTTP server didn't start. Is there another service using port" $port "?" return 1 fi echo 'Pelican and HTTP server processes now running in background.' } ### # MAIN ### [[ ($# -eq 0) || ($# -gt 2) ]] && usage port='' [[ $# -eq 2 ]] && port=$2 if [[ $1 == "stop" ]]; then shut_down elif [[ $1 == "restart" ]]; then shut_down start_up $port elif [[ $1 == "start" ]]; then if ! start_up $port; then shut_down fi else usage fi