Сценарий оболочки для перезапуска процесса, если он выводит определенный фрагмент текста

У меня есть программа python, которая время от времени выходит из строя с несколькими различными исключениями, обычно из-за сетевых проблем. Единственный способ заставить его работать - это перезапустить его. Как я могу написать сценарий оболочки для запуска процесса, постоянно проверяйте, говорит ли какой-либо из них Error, и если это так закончится и перезапустите команду (назовем ее ./command.sh)?

It было бы хорошо, если бы это было на любом другом языке (python / perl и т. д.).

3
задан 14 June 2011 в 22:55

16 ответов

Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:

while ! ./command.sh ; do : ; done

Конечно, если вы просто хотите запустить команду все время , просто напишите:

while true ; do ./command.sh ; done

(это предполагает, что ./command.sh не fork и не выходит)

3
ответ дан 25 May 2018 в 20:19
  • 1
    Мы посмотрим, будет ли это работать, теперь просто ждать ошибки: p – Callum Rogers 14 June 2011 в 23:46

Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:

while ! ./command.sh ; do : ; done

Конечно, если вы просто хотите запустить команду все время , просто напишите:

while true ; do ./command.sh ; done

(это предполагает, что ./command.sh не fork и не выходит)

3
ответ дан 25 July 2018 в 21:43

Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:

while ! ./command.sh ; do : ; done

Конечно, если вы просто хотите запустить команду все время , просто напишите:

while true ; do ./command.sh ; done

(это предполагает, что ./command.sh не fork и не выходит)

3
ответ дан 2 August 2018 в 03:19

Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:

while ! ./command.sh ; do : ; done

Конечно, если вы просто хотите запустить команду все время , просто напишите:

while true ; do ./command.sh ; done

(это предполагает, что ./command.sh не fork и не выходит)

3
ответ дан 4 August 2018 в 19:16

Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:

while ! ./command.sh ; do : ; done

Конечно, если вы просто хотите запустить команду все время , просто напишите:

while true ; do ./command.sh ; done

(это предполагает, что ./command.sh не fork и не выходит)

3
ответ дан 6 August 2018 в 03:30

Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:

while ! ./command.sh ; do : ; done

Конечно, если вы просто хотите запустить команду все время , просто напишите:

while true ; do ./command.sh ; done

(это предполагает, что ./command.sh не fork и не выходит)

3
ответ дан 7 August 2018 в 21:17

Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:

  while!  ./command.sh;  делать : ;  done  

Конечно, если вы просто хотите запустить команду все время, просто напишите:

  while true;  do ./command.sh;  done  

(это предполагает ./ command.sh не для fork и выхода)

3
ответ дан 10 August 2018 в 09:35

Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:

  while!  ./command.sh;  делать : ;  done  

Конечно, если вы просто хотите запустить команду все время, просто напишите:

  while true;  do ./command.sh;  done  

(это предполагает ./ command.sh не для fork и выхода)

3
ответ дан 13 August 2018 в 15:46
  • 1
    Мы посмотрим, будет ли это работать, теперь просто ждать ошибки: p – Callum Rogers 14 June 2011 в 23:46

Я сделал что-то похожее на восстановление ted (Torrent Episode Downloader) из его обычных сбоев. Ниже приведен сценарий, который я использовал.

Редактировать: как это работает

Ted имеет файл журнала. Поскольку он проверяет новые эпизоды каждые полчаса, в этом журнале есть метка времени, которая не старше получаса. Конечно, временная метка не существует, если ted разбился за это время.

Редактировать: как это работает

Вы можете перенаправить вывод своей проблемной программы в файл. Напишите скрипт, похожий на мой, который проверяет этот файл. Если он найдет там плохую строку, перезапустит приложение (и удалит выходной файл). Вы можете запустить скрипт в бесконечном цикле или использовать cron. Я решил использовать cron, поэтому у меня меньше загрязнений процесса, и проверки не обязательно должны быть невероятно частыми.

#!/bin/bash
# indent-mode: spaces, indentsize: 4, encoding: utf-8
# © 2011 con-f-use@gmx.net.
# Use permitted under MIT license:
# http://www.opensource.org/licenses/mit-license.php (NO WARRANTY IMPLIED)

teddir='/home/confus/ted'   # Location of the ted executable
logpath='/home/confus/.Torrent Episode Downloader/log.txt' # Location of ted's log

# Get the process id for ted so it can be killed later
pid=$(lsof "$teddir/ted.jar" | grep -m1 java )
set -- $pid
pid=$2
echo "Ted is running unter pid: $pid."

# Check if the log is recent
search=$(date "+%b %d, %Y @ {0,1}%l:[0-9]{2} %p")
search=$(cat "$logpath" | grep -oE "$search")

# If ted is running and the log is not recent, kill crashed process and
#+restart it.
if [ -n "$pid" ] && [ ! -n "$search" ]; then
    echo "Killig $pid."
    kill "$pid" || exit 1
    echo "Restarting ted..."
    cd "$teddir"
    /usr/bin/java -jar ted.jar noTray
fi

exit 0

В моем случае был все еще активный процесс для ted после сбоя, но Тед ничего не делал. Убивает этот процесс, тогда вы можете, конечно, пропустить pid-Parts.

P.S. Это может быть или не быть плохой частью кода. Может быть, гораздо лучший способ, но он работает, и я собрал его в очень короткое время.

2
ответ дан 25 May 2018 в 20:19

Я сделал что-то похожее на восстановление ted (Torrent Episode Downloader) из его обычных сбоев. Ниже приведен сценарий, который я использовал.

Редактировать: как это работает

Ted имеет файл журнала. Поскольку он проверяет новые эпизоды каждые полчаса, в этом журнале есть метка времени, которая не старше получаса. Конечно, временная метка не существует, если ted разбился за это время.

Редактировать: как это работает

Вы можете перенаправить вывод своей проблемной программы в файл. Напишите скрипт, похожий на мой, который проверяет этот файл. Если он найдет там плохую строку, перезапустит приложение (и удалит выходной файл). Вы можете запустить скрипт в бесконечном цикле или использовать cron. Я решил использовать cron, поэтому у меня меньше загрязнений процесса, и проверки не обязательно должны быть невероятно частыми.

#!/bin/bash # indent-mode: spaces, indentsize: 4, encoding: utf-8 # © 2011 con-f-use@gmx.net. # Use permitted under MIT license: # http://www.opensource.org/licenses/mit-license.php (NO WARRANTY IMPLIED) teddir='/home/confus/ted' # Location of the ted executable logpath='/home/confus/.Torrent Episode Downloader/log.txt' # Location of ted's log # Get the process id for ted so it can be killed later pid=$(lsof "$teddir/ted.jar" | grep -m1 java ) set -- $pid pid=$2 echo "Ted is running unter pid: $pid." # Check if the log is recent search=$(date "+%b %d, %Y @ {0,1}%l:[0-9]{2} %p") search=$(cat "$logpath" | grep -oE "$search") # If ted is running and the log is not recent, kill crashed process and #+restart it. if [ -n "$pid" ] && [ ! -n "$search" ]; then echo "Killig $pid." kill "$pid" || exit 1 echo "Restarting ted..." cd "$teddir" /usr/bin/java -jar ted.jar noTray fi exit 0

В моем случае был все еще активный процесс для ted после сбоя, но Тед ничего не делал. Убивает этот процесс, тогда вы можете, конечно, пропустить pid-Parts.

P.S. Это может быть или не быть плохой частью кода. Может быть, гораздо лучший способ, но он работает, и я собрал его в очень короткое время.

2
ответ дан 25 July 2018 в 21:43

Я сделал что-то похожее на восстановление ted (Torrent Episode Downloader) из его обычных сбоев. Ниже приведен сценарий, который я использовал.

Редактировать: как это работает

Ted имеет файл журнала. Поскольку он проверяет новые эпизоды каждые полчаса, в этом журнале есть метка времени, которая не старше получаса. Конечно, временная метка не существует, если ted разбился за это время.

Редактировать: как это работает

Вы можете перенаправить вывод своей проблемной программы в файл. Напишите скрипт, похожий на мой, который проверяет этот файл. Если он найдет там плохую строку, перезапустит приложение (и удалит выходной файл). Вы можете запустить скрипт в бесконечном цикле или использовать cron. Я решил использовать cron, поэтому у меня меньше загрязнений процесса, и проверки не обязательно должны быть невероятно частыми.

#!/bin/bash # indent-mode: spaces, indentsize: 4, encoding: utf-8 # © 2011 con-f-use@gmx.net. # Use permitted under MIT license: # http://www.opensource.org/licenses/mit-license.php (NO WARRANTY IMPLIED) teddir='/home/confus/ted' # Location of the ted executable logpath='/home/confus/.Torrent Episode Downloader/log.txt' # Location of ted's log # Get the process id for ted so it can be killed later pid=$(lsof "$teddir/ted.jar" | grep -m1 java ) set -- $pid pid=$2 echo "Ted is running unter pid: $pid." # Check if the log is recent search=$(date "+%b %d, %Y @ {0,1}%l:[0-9]{2} %p") search=$(cat "$logpath" | grep -oE "$search") # If ted is running and the log is not recent, kill crashed process and #+restart it. if [ -n "$pid" ] && [ ! -n "$search" ]; then echo "Killig $pid." kill "$pid" || exit 1 echo "Restarting ted..." cd "$teddir" /usr/bin/java -jar ted.jar noTray fi exit 0

В моем случае был все еще активный процесс для ted после сбоя, но Тед ничего не делал. Убивает этот процесс, тогда вы можете, конечно, пропустить pid-Parts.

P.S. Это может быть или не быть плохой частью кода. Может быть, гораздо лучший способ, но он работает, и я собрал его в очень короткое время.

2
ответ дан 2 August 2018 в 03:19

Я сделал что-то похожее на восстановление ted (Torrent Episode Downloader) из его обычных сбоев. Ниже приведен сценарий, который я использовал.

Редактировать: как это работает

Ted имеет файл журнала. Поскольку он проверяет новые эпизоды каждые полчаса, в этом журнале есть метка времени, которая не старше получаса. Конечно, временная метка не существует, если ted разбился за это время.

Редактировать: как это работает

Вы можете перенаправить вывод своей проблемной программы в файл. Напишите скрипт, похожий на мой, который проверяет этот файл. Если он найдет там плохую строку, перезапустит приложение (и удалит выходной файл). Вы можете запустить скрипт в бесконечном цикле или использовать cron. Я решил использовать cron, поэтому у меня меньше загрязнений процесса, и проверки не обязательно должны быть невероятно частыми.

#!/bin/bash # indent-mode: spaces, indentsize: 4, encoding: utf-8 # © 2011 con-f-use@gmx.net. # Use permitted under MIT license: # http://www.opensource.org/licenses/mit-license.php (NO WARRANTY IMPLIED) teddir='/home/confus/ted' # Location of the ted executable logpath='/home/confus/.Torrent Episode Downloader/log.txt' # Location of ted's log # Get the process id for ted so it can be killed later pid=$(lsof "$teddir/ted.jar" | grep -m1 java ) set -- $pid pid=$2 echo "Ted is running unter pid: $pid." # Check if the log is recent search=$(date "+%b %d, %Y @ {0,1}%l:[0-9]{2} %p") search=$(cat "$logpath" | grep -oE "$search") # If ted is running and the log is not recent, kill crashed process and #+restart it. if [ -n "$pid" ] && [ ! -n "$search" ]; then echo "Killig $pid." kill "$pid" || exit 1 echo "Restarting ted..." cd "$teddir" /usr/bin/java -jar ted.jar noTray fi exit 0

В моем случае был все еще активный процесс для ted после сбоя, но Тед ничего не делал. Убивает этот процесс, тогда вы можете, конечно, пропустить pid-Parts.

P.S. Это может быть или не быть плохой частью кода. Может быть, гораздо лучший способ, но он работает, и я собрал его в очень короткое время.

2
ответ дан 4 August 2018 в 19:16

Я сделал что-то похожее на восстановление ted (Torrent Episode Downloader) из его обычных сбоев. Ниже приведен сценарий, который я использовал.

Редактировать: как это работает

Ted имеет файл журнала. Поскольку он проверяет новые эпизоды каждые полчаса, в этом журнале есть метка времени, которая не старше получаса. Конечно, временная метка не существует, если ted разбился за это время.

Редактировать: как это работает

Вы можете перенаправить вывод своей проблемной программы в файл. Напишите скрипт, похожий на мой, который проверяет этот файл. Если он найдет там плохую строку, перезапустит приложение (и удалит выходной файл). Вы можете запустить скрипт в бесконечном цикле или использовать cron. Я решил использовать cron, поэтому у меня меньше загрязнений процесса, и проверки не обязательно должны быть невероятно частыми.

#!/bin/bash # indent-mode: spaces, indentsize: 4, encoding: utf-8 # © 2011 con-f-use@gmx.net. # Use permitted under MIT license: # http://www.opensource.org/licenses/mit-license.php (NO WARRANTY IMPLIED) teddir='/home/confus/ted' # Location of the ted executable logpath='/home/confus/.Torrent Episode Downloader/log.txt' # Location of ted's log # Get the process id for ted so it can be killed later pid=$(lsof "$teddir/ted.jar" | grep -m1 java ) set -- $pid pid=$2 echo "Ted is running unter pid: $pid." # Check if the log is recent search=$(date "+%b %d, %Y @ {0,1}%l:[0-9]{2} %p") search=$(cat "$logpath" | grep -oE "$search") # If ted is running and the log is not recent, kill crashed process and #+restart it. if [ -n "$pid" ] && [ ! -n "$search" ]; then echo "Killig $pid." kill "$pid" || exit 1 echo "Restarting ted..." cd "$teddir" /usr/bin/java -jar ted.jar noTray fi exit 0

В моем случае был все еще активный процесс для ted после сбоя, но Тед ничего не делал. Убивает этот процесс, тогда вы можете, конечно, пропустить pid-Parts.

P.S. Это может быть или не быть плохой частью кода. Может быть, гораздо лучший способ, но он работает, и я собрал его в очень короткое время.

2
ответ дан 6 August 2018 в 03:30

Я сделал что-то похожее на восстановление ted (Torrent Episode Downloader) из его обычных сбоев. Ниже приведен сценарий, который я использовал.

Редактировать: как это работает

Ted имеет файл журнала. Поскольку он проверяет новые эпизоды каждые полчаса, в этом журнале есть метка времени, которая не старше получаса. Конечно, временная метка не существует, если ted разбился за это время.

Редактировать: как это работает

Вы можете перенаправить вывод своей проблемной программы в файл. Напишите скрипт, похожий на мой, который проверяет этот файл. Если он найдет там плохую строку, перезапустит приложение (и удалит выходной файл). Вы можете запустить скрипт в бесконечном цикле или использовать cron. Я решил использовать cron, поэтому у меня меньше загрязнений процесса, и проверки не обязательно должны быть невероятно частыми.

#!/bin/bash # indent-mode: spaces, indentsize: 4, encoding: utf-8 # © 2011 con-f-use@gmx.net. # Use permitted under MIT license: # http://www.opensource.org/licenses/mit-license.php (NO WARRANTY IMPLIED) teddir='/home/confus/ted' # Location of the ted executable logpath='/home/confus/.Torrent Episode Downloader/log.txt' # Location of ted's log # Get the process id for ted so it can be killed later pid=$(lsof "$teddir/ted.jar" | grep -m1 java ) set -- $pid pid=$2 echo "Ted is running unter pid: $pid." # Check if the log is recent search=$(date "+%b %d, %Y @ {0,1}%l:[0-9]{2} %p") search=$(cat "$logpath" | grep -oE "$search") # If ted is running and the log is not recent, kill crashed process and #+restart it. if [ -n "$pid" ] && [ ! -n "$search" ]; then echo "Killig $pid." kill "$pid" || exit 1 echo "Restarting ted..." cd "$teddir" /usr/bin/java -jar ted.jar noTray fi exit 0

В моем случае был все еще активный процесс для ted после сбоя, но Тед ничего не делал. Убивает этот процесс, тогда вы можете, конечно, пропустить pid-Parts.

P.S. Это может быть или не быть плохой частью кода. Может быть, гораздо лучший способ, но он работает, и я собрал его в очень короткое время.

2
ответ дан 7 August 2018 в 21:17

Я сделал что-то похожее на восстановление ted (Torrent Episode Downloader) из своих обычных сбоев. Ниже приведен сценарий, который я использовал.

Редактировать: как это работает

Ted имеет файл журнала. Поскольку он проверяет новые эпизоды каждые полчаса, в этом журнале есть метка времени, которая не старше получаса. Конечно, временная метка не существует, если ted разбился за это время.

Изменить: как это может помочь вам

Вы можете перенаправить вывод проблемной программы в файл. Напишите скрипт, похожий на мой, который проверяет этот файл. Если он найдет там плохую строку, перезапустит приложение (и удалит выходной файл). Вы можете запустить скрипт в бесконечном цикле или использовать cron. Я выбрал использовать cron, чтобы у меня было меньше загрязнений процесса, и проверки не обязательно должны быть невероятно частыми.

  #! / Bin / bash # indent-mode: пробелы, отступы: 4  , кодирование: utf-8 # © 2011 conf-use@gmx.net.  # Использование разрешено в соответствии с лицензией MIT: # http://www.opensource.org/licenses/mit-license.php (НИКАКИЕ ГАРАНТИИ НЕ ПОДРАЗУМЕВАЕМЫ) teddir = '/ home / confus / ted' # Местоположение исполняемого logt_ted = '/  home / confus / .Torrent Episode Downloader / log.txt '# Местоположение журнала ted # Получить идентификатор процесса для ted, чтобы его можно было убить позже pid = $ (lsof "$ teddir / ted.jar" | grep -m1 java)  set - $ pid pid = $ 2 echo "Ted запускает unter pid: $ pid."  # Проверить, является ли журнал последним поиском = $ (date "+% b% d,% Y @ {0,1}% l: [0-9] {2}% p") search = $ (cat "$ logpath  "| grep -oE" $ search ") # Если ted запущен и журнал не является последним, уничтожьте аварийный процесс и # + перезапустите его.  если [-n "$ pid"] & amp; & amp; & amp;  [!  -n "$ search"];  затем эхо «Killig $ pid».  kill "$ pid" ||  exit 1 echo «Перезапуск ted ...» cd «$ teddir» / usr / bin / java -jar ted.jar noTray fi exit 0  

В моем случае все еще был активный процесс для ted после крушения, но ted ничего не делал. Убивает его процесс, тогда вы можете, конечно, пропустить pid-Parts.

P.S. Это может быть или не быть плохой частью кода. Там может быть намного лучший способ, но он работает, и я собрал его в очень короткое время.

2
ответ дан 10 August 2018 в 09:35

Я сделал что-то похожее на восстановление ted (Torrent Episode Downloader) из своих обычных сбоев. Ниже приведен сценарий, который я использовал.

Редактировать: как это работает

Ted имеет файл журнала. Поскольку он проверяет новые эпизоды каждые полчаса, в этом журнале есть метка времени, которая не старше получаса. Конечно, временная метка не существует, если ted разбился за это время.

Изменить: как это может помочь вам

Вы можете перенаправить вывод проблемной программы в файл. Напишите скрипт, похожий на мой, который проверяет этот файл. Если он найдет там плохую строку, перезапустит приложение (и удалит выходной файл). Вы можете запустить скрипт в бесконечном цикле или использовать cron. Я выбрал использовать cron, чтобы у меня было меньше загрязнений процесса, и проверки не обязательно должны быть невероятно частыми.

  #! / Bin / bash # indent-mode: пробелы, отступы: 4  , кодирование: utf-8 # © 2011 conf-use@gmx.net.  # Использование разрешено в соответствии с лицензией MIT: # http://www.opensource.org/licenses/mit-license.php (НИКАКИЕ ГАРАНТИИ НЕ ПОДРАЗУМЕВАЕМЫ) teddir = '/ home / confus / ted' # Местоположение исполняемого logt_ted = '/  home / confus / .Torrent Episode Downloader / log.txt '# Местоположение журнала ted # Получить идентификатор процесса для ted, чтобы его можно было убить позже pid = $ (lsof "$ teddir / ted.jar" | grep -m1 java)  set - $ pid pid = $ 2 echo "Ted запускает unter pid: $ pid."  # Проверить, является ли журнал последним поиском = $ (date "+% b% d,% Y @ {0,1}% l: [0-9] {2}% p") search = $ (cat "$ logpath  "| grep -oE" $ search ") # Если ted запущен и журнал не является последним, уничтожьте аварийный процесс и # + перезапустите его.  если [-n "$ pid"] & amp; & amp; & amp;  [!  -n "$ search"];  затем эхо «Killig $ pid».  kill "$ pid" ||  exit 1 echo «Перезапуск ted ...» cd «$ teddir» / usr / bin / java -jar ted.jar noTray fi exit 0  

В моем случае все еще был активный процесс для ted после крушения, но ted ничего не делал. Убивает его процесс, тогда вы можете, конечно, пропустить pid-Parts.

P.S. Это может быть или не быть плохой частью кода. Там может быть намного лучший способ, но он работает, и я собрал его в очень короткое время.

2
ответ дан 13 August 2018 в 15:46

Другие вопросы по тегам:

Похожие вопросы: