Подтвердить что ты не робот

Выполнение двух команд последовательно в задании cron?

У меня две команды в задании cron:

mysql -xxxxxx -pyyyyyyyyyyv -hlocalhost -e "call MyFunction1";wget -N http://mywebsite.net/path/AfterMyFunction1.php

но мне кажется, что оба они работают одновременно.

Как выполнить первый запуск команды и когда она завершится, выполните вторую команду?

Также у AfterMyFunction1.php есть HTTP-запросы javascript, которые не выполняются при использовании wget. Он работает, если я открыл AfterMyFunction1.php в своем веб-браузере.

4b9b3361

Ответ 1

Если первая команда требуется выполнить сначала, вы должны отделить их && & оператора, как в оболочке. Если первый сбой, второй не будет запущен.

Ответ 2

Вы можете использовать sem, который является частью GNU parallel.

0 0 * * * root  sem --jobs 1 --id MyQueue mysql -xxxxxx -pyyyyyyyyyyv -hlocalhost -e "call MyFunction1"
1 0 * * * root  sem --jobs 1 --id MyQueue wget -N http://mywebsite.net/path/AfterMyFunction1.php

Этот cron config сначала запустит mysql через sem, который поместит его в очередь, называемую MyQueue. Эта очередь, вероятно, будет пустой, поэтому mysql выполняется немедленно. Через минуту cron запустит еще один sem, который поместит wget в ту же очередь. С помощью --jobs 1 sem указывается, что выполняется только одно задание за раз в этой конкретной очереди. Как только mysql закончен, второй sem будет запускать команду wget. sem имеет множество опций для управления поведением в очереди.

Решение &&, вероятно, лучше, так как оно не будет выполнять вторую команду, если первая не сработает. Преимущество решения sem состоит в том, что вы можете указать разные настройки cron, например, другого пользователя. И это предотвратит дублирование заданий cron, если интервал cron короче, чем продолжительность работы.