Запуск скриптов по крону.

12
K
На сайте с 01.09.2005
Offline
235
527
Подскажите пожалуйста, как проще всего запускать 6 файлов по крону.
file1 - запустить
file2 - запустить через 11 минут после запуска file1
file3 - запустить через 11 минут после запуска file2
file4 - запустить через 11 минут после запуска file3
file5 - запустить через 11 минут после запуска file4
file6 - запустить через 11 минут после запуска file5

file1 - запускать через 11 минут после запуска file6
file2 - запустить через 11 минут после запуска file1
file3 - запустить через 11 минут после запуска file2
file4 - запустить через 11 минут после запуска file3
file5 - запустить через 11 минут после запуска file4
file6 - запустить через 11 минут после запуска file5
Суть скрипта, запускать каждый файл(всего их 6) через каждые 11 минут, по кругу.

Можно было бы по крону запускать, но у крона нет 66 минуты. Как быть?
csnet
На сайте с 05.08.2016
Offline
103
#1
И так: зависит от файла, php / sh  т.е надо отслеживать в файле каком то сколько мминут прошло.

Данные какие либо есть?
baas
На сайте с 17.09.2012
Offline
162
#2

Хмм, пока вот что придумал.

Первый запуск такой

0 * * * *  date '+%R' --date="11 minutes" > /tmp/test0 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test0} ] && date '+%R' --date="11 minutes" > /tmp/test1 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test1} ] && date '+%R' --date="11 minutes" > /tmp/test2 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test2} ] && date '+%R' --date="11 minutes" > /tmp/test3 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test3} ] && date '+%R' --date="11 minutes" > /tmp/test4 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test4} ] && date '+%R' --date="11 minutes" > /tmp/test5 && run-my-sckripts

После поправить первую запись.

* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test5} ] && date '+%R' --date="11 minutes" > /tmp/test0 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test0} ] && date '+%R' --date="11 minutes" > /tmp/test1 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test1} ] && date '+%R' --date="11 minutes" > /tmp/test2 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test2} ] && date '+%R' --date="11 minutes" > /tmp/test3 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test3} ] && date '+%R' --date="11 minutes" > /tmp/test4 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test4} ] && date '+%R' --date="11 minutes" > /tmp/test5 && run-my-sckripts

Только проверить синтаксис записей, я не проверял подобное.

Настройка BSD систем. (https://www.fryaha.ru) Знание сила, незнание Рабочая сила!
K
На сайте с 01.09.2005
Offline
235
#3
csnet #:
И так: зависит от файла, php / sh  т.е надо отслеживать в файле каком то сколько мминут прошло.

Данные какие либо есть?
Да, запуск именно file.php да что бы следующий файл запускался не ранее 11 минут.
Алеандр
На сайте с 08.12.2010
Offline
183
#4

Не совсем понятно, нужно запускать через 11 минут после старта предыдущего или после завершения работы предыдущего.
Если после старта, то достаточно запускать */11 минут один и тот же скрипт, внутри которого прописать условия, какой порядковый файл требует запуска. Это делается баш-скриптиком, который хранит в файле текущий индекс запущенного файла и, в зависимости от индекса - запускает следующий.
Если же нужно после завершения работы, то лучше всего подойдет написать обертку, которая будет запускаться по крону каждую минуту, проверять, отработал ли предыдущий скрипт и, если отработал - запускать следующий по индексу.
Если же нужно прям секунда в секунду, то нужно делать скрипт, который будет по результату выхода из предыдущего скрипта тут же запускать следующий.

Одним кроном будет слишком замороченно, куда проще написать управляющую обертку и уже ее запускать, либо один раз, либо по нужному таймеру.

W1
На сайте с 22.01.2021
Offline
285
#5
kostyk :
через 11 минут

А через 10 минут - не подойдёт?

Мой форум - https://webinfo.guru –Там я всегда на связи
K
На сайте с 01.09.2005
Offline
235
#6
webinfo #:

А через 10 минут - не подойдёт?

нет

W1
На сайте с 22.01.2021
Offline
285
#7
kostyk #:

нет

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

L
На сайте с 10.02.2015
Offline
221
#8
webinfo #:

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

Или каждые 11 минут


Или каждые 11 минут запускать т.н. мастер-скрипт

И в нем проверять чья очередь

И запускать его из мастер-скрипта

baas
На сайте с 17.09.2012
Offline
162
#9

Либо еще так, что бы после перезагрузки не париться.

@reboot date '+%R' --date="11 minutes" > /tmp/test5
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test5} ] && date '+%R' --date="11 minutes" > /tmp/test0 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test0} ] && date '+%R' --date="11 minutes" > /tmp/test1 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test1} ] && date '+%R' --date="11 minutes" > /tmp/test2 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test2} ] && date '+%R' --date="11 minutes" > /tmp/test3 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test3} ] && date '+%R' --date="11 minutes" > /tmp/test4 && run-my-sckripts
* * * * *  [ "$(date '+%R')" -eq {cat /tmp/test4} ] && date '+%R' --date="11 minutes" > /tmp/test5 && run-my-sckripts
W1
На сайте с 22.01.2021
Offline
285
#10
livetv #:
Или каждые 11 минут

В конце часа будет обнуление. Проверь.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий