У меня есть программа python, которая время от времени выходит из строя с несколькими различными исключениями, обычно из-за сетевых проблем. Единственный способ заставить его работать - это перезапустить его. Как я могу написать сценарий оболочки для запуска процесса, постоянно проверяйте, говорит ли какой-либо из них Error, и если это так закончится и перезапустите команду (назовем ее ./command.sh)?
It было бы хорошо, если бы это было на любом другом языке (python / perl и т. д.).
Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:
while ! ./command.sh ; do : ; done
Конечно, если вы просто хотите запустить команду все время , просто напишите:
while true ; do ./command.sh ; done
(это предполагает, что ./command.sh не fork и не выходит)
Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:
while ! ./command.sh ; do : ; done
Конечно, если вы просто хотите запустить команду все время , просто напишите:
while true ; do ./command.sh ; done
(это предполагает, что ./command.sh не fork и не выходит)
Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:
while ! ./command.sh ; do : ; done
Конечно, если вы просто хотите запустить команду все время , просто напишите:
while true ; do ./command.sh ; done
(это предполагает, что ./command.sh не fork и не выходит)
Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:
while ! ./command.sh ; do : ; done
Конечно, если вы просто хотите запустить команду все время , просто напишите:
while true ; do ./command.sh ; done
(это предполагает, что ./command.sh не fork и не выходит)
Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:
while ! ./command.sh ; do : ; done
Конечно, если вы просто хотите запустить команду все время , просто напишите:
while true ; do ./command.sh ; done
(это предполагает, что ./command.sh не fork и не выходит)
Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:
while ! ./command.sh ; do : ; done
Конечно, если вы просто хотите запустить команду все время , просто напишите:
while true ; do ./command.sh ; done
(это предполагает, что ./command.sh не fork и не выходит)
Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:
while! ./command.sh; делать : ; done
Конечно, если вы просто хотите запустить команду все время, просто напишите:
while true; do ./command.sh; done
(это предполагает ./ command.sh
не для fork и выхода)
Поскольку python выходит с кодом возврата! = 0, когда он выдает исключение, вы можете просто запустить этот сценарий оболочки:
while! ./command.sh; делать : ; done
Конечно, если вы просто хотите запустить команду все время, просто напишите:
while true; do ./command.sh; done
(это предполагает ./ command.sh
не для fork и выхода)
Я сделал что-то похожее на восстановление 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. Это может быть или не быть плохой частью кода. Может быть, гораздо лучший способ, но он работает, и я собрал его в очень короткое время.
Я сделал что-то похожее на восстановление 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. Это может быть или не быть плохой частью кода. Может быть, гораздо лучший способ, но он работает, и я собрал его в очень короткое время.
Я сделал что-то похожее на восстановление 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. Это может быть или не быть плохой частью кода. Может быть, гораздо лучший способ, но он работает, и я собрал его в очень короткое время.
Я сделал что-то похожее на восстановление 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. Это может быть или не быть плохой частью кода. Может быть, гораздо лучший способ, но он работает, и я собрал его в очень короткое время.
Я сделал что-то похожее на восстановление 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. Это может быть или не быть плохой частью кода. Может быть, гораздо лучший способ, но он работает, и я собрал его в очень короткое время.
Я сделал что-то похожее на восстановление 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. Это может быть или не быть плохой частью кода. Может быть, гораздо лучший способ, но он работает, и я собрал его в очень короткое время.
Я сделал что-то похожее на восстановление 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. Это может быть или не быть плохой частью кода. Там может быть намного лучший способ, но он работает, и я собрал его в очень короткое время.
Я сделал что-то похожее на восстановление 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. Это может быть или не быть плохой частью кода. Там может быть намного лучший способ, но он работает, и я собрал его в очень короткое время.