Ответ 1
Если первая команда требуется выполнить сначала, вы должны отделить их && & оператора, как в оболочке. Если первый сбой, второй не будет запущен.
У меня две команды в задании cron:
mysql -xxxxxx -pyyyyyyyyyyv -hlocalhost -e "call MyFunction1";wget -N http://mywebsite.net/path/AfterMyFunction1.php
но мне кажется, что оба они работают одновременно.
Как выполнить первый запуск команды и когда она завершится, выполните вторую команду?
Также у AfterMyFunction1.php есть HTTP-запросы javascript, которые не выполняются при использовании wget. Он работает, если я открыл AfterMyFunction1.php в своем веб-браузере.
Если первая команда требуется выполнить сначала, вы должны отделить их && & оператора, как в оболочке. Если первый сбой, второй не будет запущен.
Вы можете использовать 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 короче, чем продолжительность работы.