Как сделать циклическое выполнение скрипта? В конце скрипта мне нужно запустить его снова. Cron не подходит, потому что мне нужно запустить скрипт сразу после предыдущего
Чтобы заставить Ваш сценарий выполниться снова и снова, можно сделать это как это (удостоверьтесь, что th сценарий имеет chmod 755
набор):
#!/bin/bash
echo "test" #or whatever you do in your script
exec sh <scriptname>
можно остановить сценарий ctrl + c .
Примечание, что использование exec
средства, что будет самое большее один процесс, работающий за один раз, вместо того, чтобы добавить новый процесс каждый раз выполнения сценария.
Базовая управляющая структура в любом виде языка программирования, который требует неопределенного цикличного выполнения, while
цикл.
while true ; do /path/to/script.sh ; if [ $? -ne 0 ] ; then continue ; else break ; fi ; done
[еще 119] читаемое форматирование было бы:
while true
do
/path/to/script.sh # Ensure your script actually outputs exit status
if [ $? -ne 0 ] ; then
continue # if exit status not 0 ( not success ) , repeat
else
break # if successful - exit
fi
done
, Конечно, необходимо удостовериться, что сценарий на самом деле имеет статус возврата, который равняется 0 на успехе. Вы можете или не можете хотеть использовать полный путь, или ./
оператор для запущения скрипта в текущем каталоге, или указывать интерпретатор такой как python /my/python/script.py
При необходимости можно добавить задержку, прежде чем следующее повторение запустится. Чтобы сделать это, можно поместить sleep 0.250
прямо после fi
, но прежде done
Выполните их как:
/path/to/script.sh && /path/to/script.sh
второй будет работать, если первый успешно выполнится.
Без в зависимости от успеха первого:
/path/to/script.sh; /path/to/script.sh
Прибегают вторыми тот, только если первый перестал работать:
/path/to/script.sh || /path/to/script.sh
<час> Для реального циклического выполнения, можно использовать рекурсивную функцию:
run_script () { /path/to/script.sh || run_script ;}