Скрипт init.d не перезапустит скрипт Python при ошибке - PullRequest
0 голосов
/ 01 октября 2018

Я новичок в сценариях оболочки, и у меня возникла небольшая проблема, когда дело доходит до повторного запуска моего сценария.Мой скрипт находится здесь /etc/init.d/receiver, и когда я использую следующую команду sudo systemctl start receiver, я получаю следующую ошибку:

Job for receiver.service failed because the control process exited with error code. See "systemctl status receiver.service" and "journalctl -xe" for details.

Чтобы проверить «повтор» при сбое,Я специально сделал строку в моем скрипте Python, которая вызывается для сбоя программы.Эта строка someError = 'error.В противном случае сценарий оболочки, который вызывает сценарий python, запускается без проблем, но весь смысл этого сценария оболочки init.d состоит в том, чтобы повторно запустить сценарий py в случае ошибки и запустить его при запуске.Вот мой код,

#!bin/sh

### BEGIN INIT INFO
# Provides:             Test_receiver.py
# Reqired-Start:        $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# Default-Start:        3 4 5 6
# Default-Stop:         0
# Short-Description:    Rabbit consumer script Test_receiver.py
### END INIT INFO

set -e

# /etc/init.d/startup: start and stop the Test_receiver.py script
# no file /etc/default/startup for added config at this time

. /lib/lsb/init-functions

cd /home/cschoom/Security/src

run_receiver(){
   log_action_begin_msg "Starting Test_receiver.py"
   log_file=/home/cschuma1/otherfile.txt
   python Test_receiver.py 2>> $log_file
   retval=$?

   if [ $retval == "0" ]; then
      echo "success"
      log_action_cont_msg "No issues"
   else
      echo "failure" >> $log_file
      log_failure_msg "ERROR WITH TEST_RECEIVER `date`"
      sleep 5
      run_receiver
   fi
}

case "$1" in
start)
   run_receiver
   ;;
stop)
   echo "killing Test_receiver script"
   log_action_begin_msg "Killing Test_receiver.py"
   kill $(pgrep -f 'python Test_receiver.py')
   ;;
restart|force-reload)
   log_action_begin_msg "Reloading Peach_receiver.py"
   run_receiver
   ;;
*)
   echo "Usage /etc/init.d/receiver (start|stop|restart|force-reload)"
   exit 1
   ;;
esac

exit 0

`

Все, что я пытаюсь сделать, это запустить Test_receiver.py, получить возвращаемое значение и, основываясь на этом возвращаемом значении, либо повторно запустить функцию run_receiverкоторый снова вызывает мой скрипт на python или завершается с кодом возврата 0.Это потребительский скрипт rabbitmq, который будет запускаться бесконечно, поэтому я хотел бы перезапустить скрипт python, поскольку ошибка скорее всего не в скрипте, а в том, что тестируется.(мой скрипт на python запускает тесты, такие как nmap, на других машинах).Любая помощь будет оценена.Спасибо

...