#!/bin/bash # file: runstop.sh #---- # Simple script to start / stop / restart a python script in the background. #---- #---- # To Use: # Run "./run.sh start" to start, "./run.sh stop" to stop, and "./run.sh restart" to restart. #---- #----BEGIN EDITABLE VARS---- SCRIPT_TO_EXECUTE_PLUS_ARGS='v2realbot/main.py -u' OUTPUT_PID_FILE=running.pid OUTPUT_PID_PATH=$HOME PYTHON_TO_USE="python" # If using 'virtualenv' with python, specify the local virtualenv dir. VIRTUAL_ENV_DIR="/c/Projects/v2trading_clone/petr_venv" #----END EDITABLE VARS------- # Additions for handling strat.log backup HISTORY_DIR="$HOME/stratlogs" TIMESTAMP=$(date +"%Y%m%d-%H%M%S") LOG_FILE="strat.log" BACKUP_LOG_FILE="$HISTORY_DIR/${TIMESTAMP}_$LOG_FILE" # If virtualenv specified & exists, using that version of python instead. if [ -d "$VIRTUAL_ENV_DIR" ]; then PYTHON_TO_USE="$VIRTUAL_ENV_DIR/Scripts/python" fi start() { # Check and create history directory if it doesn't exist [ ! -d "$HISTORY_DIR" ] && mkdir -p "$HISTORY_DIR" # Check if strat.log exists and back it up if [ -f "$LOG_FILE" ]; then mv "$LOG_FILE" "$BACKUP_LOG_FILE" echo "Backed up log to $BACKUP_LOG_FILE" fi if [ ! -e "$OUTPUT_PID_PATH/$OUTPUT_PID_FILE" ]; then nohup "$PYTHON_TO_USE" ./$SCRIPT_TO_EXECUTE_PLUS_ARGS > strat.log 2>&1 & echo $! > "$OUTPUT_PID_PATH/$OUTPUT_PID_FILE" echo "Started $SCRIPT_TO_EXECUTE_PLUS_ARGS @ Process: $!" sleep .7 echo "Created $OUTPUT_PID_FILE file in $OUTPUT_PID_PATH dir" else echo "$SCRIPT_TO_EXECUTE_PLUS_ARGS is already running." fi } stop() { if [ -e "$OUTPUT_PID_PATH/$OUTPUT_PID_FILE" ]; then the_pid=$(<$OUTPUT_PID_PATH/$OUTPUT_PID_FILE) rm "$OUTPUT_PID_PATH/$OUTPUT_PID_FILE" echo "Deleted $OUTPUT_PID_FILE file in $OUTPUT_PID_PATH dir" kill "$the_pid" COUNTER=1 while [ -e /proc/$the_pid ] do echo "$SCRIPT_TO_EXECUTE_PLUS_ARGS @: $the_pid is still running" sleep .7 COUNTER=$[$COUNTER +1] if [ $COUNTER -eq 20 ]; then kill -9 "$the_pid" fi if [ $COUNTER -eq 40 ]; then exit 1 fi done echo "$SCRIPT_TO_EXECUTE_PLUS_ARGS @: $the_pid has finished" else echo "$SCRIPT_TO_EXECUTE_PLUS_ARGS is not running." fi } restart() { stop sleep 1 start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac exit 0