Я новичок в сценариях оболочки, и у меня возникла небольшая проблема, когда дело доходит до повторного запуска моего сценария.Мой скрипт находится здесь /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, на других машинах).Любая помощь будет оценена.Спасибо