У меня есть многопоточная Java-программа, которая использует библиотеку с открытым исходным кодом, и в этой библиотеке есть некоторые ошибки, которые приводят к тупику. Я сообщил об ошибке, но для ее исправления потребуется время, мне нужно будет продолжать использовать эту программу и до тех пор, пока она перезагружается каждые 2-3 часа, это сделает работу за меня. Есть ли способ сделать перезапуск программы каждые х минут?
3 ответа
Вы можете попробовать сделать в вашем crontab
:
crontab -e
затем
11 */3 * * * /usr/bin/pkill -f appli_name; /path/to/appli_name & &>/dev/null
Команда crontab
означает:
- каждые 3 часа
- убить appli_name
- начать appli_name в фоновом режиме
Я предлагаю вам настроить Supervisor для вашей задачи. Он может отслеживать процесс, перезапускать его в случае сбоя, а также обеспечивает перенаправление вывода и другие полезные функции. Смотрите пример для программы, чтобы начать.
У меня похожая проблема в том, что мой сайт подвергается атакам ботов, которые используют все мои процессы httpd.
Я сделал простой сценарий оболочки, чтобы справиться с ним, убивая все процессы httpd каждые десять минут. (Я знаю, это не правильное исправление, но я меняю провайдеров на того, который даст мне надлежащую поддержку брандмауэра, поэтому я не хочу вкладывать что-то в правильное исправление прямо сейчас.)
Это то, что я использую:
while [ 1 ]; do uptime; killall httpd; psg httpd | wc; sleep 600; done
Команды "uptime" и "psg httpd | wc" просто обеспечивают трассировку на терминале и не нужны. "psg" - это функция, которая просто запускает ps и ищет его в качестве аргумента, поэтому выводит количество запущенных экземпляров процесса "httpd".
Для ваших целей все, что вам нужно, это "killall" и заменить "600" на количество секунд, которое вы хотите подождать между уничтожением процессов.
while [ 1 ]; do killall name_of_executable; sleep 600; done